Как спроектировать таблицу Transactional Outbox при одной реплике message relay и отсутствии существенной нагрузки: какие нужны поля и индексы?

Достаточно event_id, типа события, aggregate_id, payload, created_at, published_at и полей повторов. Нужны первичный ключ и индекс для поиска ещё не опубликованных событий в порядке обработки.

Короткий ответ

Что ответить на собеседовании

Достаточно event_id, типа события, aggregate_id, payload, created_at, published_at и полей повторов. Нужны первичный ключ и индекс для поиска ещё не опубликованных событий в порядке обработки.

Подробный разбор

Ответ с пояснениями

Достаточно event_id, типа события, aggregate_id, payload, created_at, published_at и полей повторов. Нужны первичный ключ и индекс для поиска ещё не опубликованных событий в порядке обработки.

Например, частичный индекс по (created_at, event_id) с условием published_at IS NULL ускоряет выборку ожидающих записей; если есть next_attempt_at, учитывайте её в запросе и индексе. Событие записывается в одной транзакции с бизнес-изменением. Единственный relay не устраняет повтор после сбоя между отправкой и отметкой публикации, поэтому нужен стабильный event_id и идемпотентный потребитель. Не добавляйте сложные leases без необходимости, но заранее определите очистку и обработку ошибок.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее