Вариант 2 является обычным выбором в литературе - мы запускаем асинхронный процесс, который собирает значения из одного или нескольких постоянных хранилищ и создает новое представление, которое кэшируется для использования вашими сценариями только для чтения.
По сути, существует очень небольшая разница между «нашими» данными, которые мы читаем из книги рекордов, и «их» данными, у которых мы имеем устаревшую копию.
Риски: добавляет чтение БД (через службу домена) в обработчик событий, что создает дополнительную потенциальную точку отказа.
И что? мы просто потерпим неудачу и повторим попытку позже. Наши представления только для чтения в любом случае являются устаревшими копиями; любой, кто ожидает задержку в наносекунду или выше, шутит сам.
Иными словами, нас не волнует сбой, нас волнует то, что мы достигаем наших целей уровня обслуживания и как быстро мы сокращаем наш бюджет ошибок.
Повторное выполнение событий для повторного проецирования модели представления может привести к другому состоянию. ie. эта страна больше не существует.
Так было всегда - с того момента, как вы решили сделать распределенную обработку; устаревшие данные стали неизбежными. Может помочь время моделирования, а также обеспечение стабильности семантики (мы можем продолжать понимать семантику кода страны, даже если эта страна больше не существует.)