Достаточно event_id, типа события, aggregate_id, payload, created_at, published_at и полей повторов. Нужны первичный ключ и индекс для поиска ещё не опубликованных событий в порядке обработки.
Как спроектировать таблицу Transactional Outbox при одной реплике message relay и отсутствии существенной нагрузки: какие нужны поля и индексы?
Достаточно 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 без необходимости, но заранее определите очистку и обработку ошибок.