теория
Давай назовём вещи своими именами — это половина архитектуры данных.
— место, где факт живёт в оригинале. Для товара это база товаров: сюда пишут продавцы, отсюда всё остальное узнаёт правду.
— всё, что вычисляется из источника: индекс поиска, витрины аналитики, кэши, отчёты. У них общее свойство: их можно потерять и пересобрать. Сгорел индекс — построили заново из базы. Это не беда, а штатная операция.
Почему это так важно? Потому что путаница «кто хозяин» — источник самых дорогих багов. Как только два места объявляют себя истиной (база и индекс, прод и витрина), они однажды разойдутся — и ты будешь чинить не данные, а спор о том, чья версия настоящая.
Отсюда правило, которое проведёт нас через весь акт:
Пишем — в один источник истины. Всё остальное строим из него, а не поддерживаем вручную.
Индекс поиска, который Гена хотел обновлять на каждой записи, — классическое производное. Его не надо синхронизировать руками: его надо выводить из базы конвейером. Вопрос только в том, как часто. Раз в ночь — это выбор реализации, а не закон природы: тот же конвейер можно гонять чаще, на отдельных ресурсах, не роняя прод.
И вот тут упирается в стену сама пакетная модель. Ночь — это сутки задержки. Погоняем чаще — час, минута. Но представь живую карту курьеров, какую завтра наверняка попросит бизнес: она не может отставать даже на минуту. Пакетная обработка отлично строит производные из вчерашнего мира. А что делать, когда мир меняется прямо сейчас, и узнать об этом надо сейчас же?