[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"glossary-transactional-outbox::ru":3,"gloss-cluster-transactional-outbox::ru":26,"gloss-next-transactional-outbox::ru":9},{"slug":4,"category":5,"name":6,"definition":7,"meta_desc":8,"faq":9,"schema_markup":9,"related":10},"transactional-outbox","data-infra","Транзакционный outbox (transactional outbox)","Транзакционный outbox — это шаблон, решающий тонкую, но частую ошибку: вы обновляете базу и публикуете событие, но это две разные системы, и сбой между ними оставляет вас с одним без другого. Решение — записать событие в таблицу outbox внутри той же транзакции базы данных, что и бизнес-изменение. Либо фиксируется и то и другое, либо ничего.\n\nЗатем отдельный процесс читает неопубликованные строки из outbox, доставляет их в очередь сообщений или поток событий и помечает каждую как отправленную. Инструменты захвата изменений (CDC), читающие журнал упреждающей записи, — распространённый способ эффективно выполнить этот шаг.\n\nДля SaaS-разработчиков это способ получить надёжное атомарное «обновить и уведомить» без распределённых транзакций — критично, когда заказ обязан всегда выпускать событие «order.created». На практике: потребители должны быть идемпотентными, потому что outbox гарантирует доставку не менее одного раза, и одно и то же событие может прийти дважды после повтора.","Транзакционный outbox пишет событие в таблицу внутри той же транзакции, что и бизнес-изменение, чтобы сбой не оставил вас с одним без другого.",null,[11,14,17,20,23],{"slug":12,"name":13},"change-data-capture","Захват изменений данных (CDC)",{"slug":15,"name":16},"dead-letter-queue","Очередь недоставленных сообщений (DLQ)",{"slug":18,"name":19},"delivery-semantics","Семантика доставки (delivery semantics)",{"slug":21,"name":22},"message-queue","Очередь сообщений (Message Queue)",{"slug":24,"name":25},"write-ahead-log","Журнал упреждающей записи (Write-Ahead Log, WAL)",[27,31,34,37,40,44,47,50,51,54,58,61],{"slug":28,"category":5,"name":29,"updated_at":30},"acid","ACID","2026-08-24T02:46:37+00:00",{"slug":32,"category":5,"name":33,"updated_at":30},"ann-search","ANN-поиск (приближённый поиск ближайших соседей)",{"slug":35,"category":5,"name":36,"updated_at":30},"backpressure","Обратное давление (backpressure)",{"slug":38,"category":5,"name":39,"updated_at":30},"batch-processing","Пакетная обработка (Batch Processing)",{"slug":41,"category":5,"name":42,"updated_at":43},"bm25","BM25","2026-08-24T02:46:38+00:00",{"slug":45,"category":5,"name":46,"updated_at":30},"cache","Кэш (Cache)",{"slug":48,"category":5,"name":49,"updated_at":30},"cap-theorem","Теорема CAP (CAP theorem)",{"slug":12,"category":5,"name":13,"updated_at":30},{"slug":52,"category":5,"name":53,"updated_at":30},"chroma","Chroma",{"slug":55,"category":5,"name":56,"updated_at":57},"chunk-overlap","Перекрытие фрагментов","2026-08-24T03:30:02+00:00",{"slug":59,"category":5,"name":60,"updated_at":30},"columnar-storage","Колоночное хранение",{"slug":62,"category":5,"name":63,"updated_at":30},"connection-pooling","Пулинг соединений (Connection Pooling)"]