- Правило № 1: Не надо.
- Правило № 2: Не надо.
Снимок модели, основанной на событиях, является оптимизацией производительности. Первое правило оптимизации производительности? Не.
В частности, моментальный снимок уменьшает количество времени, которое вы теряете в своем репозитории, пытаясь перезагрузить историю вашей модели из магазина событий.
Если ваш репозиторий может хранить модель в памяти, то вы не собираетесь ее перезагружать очень часто. Таким образом, выигрыш от моментального снимка будет небольшим. Поэтому: нет.
Если вы можете разложить свою модель на aggregates
, что означает, что вы можете разложить историю вашей модели на несколько объектов, которые имеют непересекающиеся истории, то ваша модель с длинной моделью истории становится многою короткой историей что каждый описывает изменения в одном объекте. Каждая история сущностей, которую нужно загрузить, будет довольно короткой, поэтому выигрыш от моментального снимка будет небольшим. Поэтому: нет.
Системы, которые я сегодня работаю, требуют высокой производительности, но не доступности 24x7. Поэтому в ситуации, когда я закрыл свою систему для maintenace и перезапустил ее, мне пришлось бы загружать и перерабатывать весь мой магазин событий, так как моя новая система не знает, какие агрегированные идентификаторы обрабатывают события. Мне нужна лучшая отправная точка для перезагрузки моих систем.
Вы обеспокоены отсутствием SLA для записи, когда тайники памяти хранилища холодные, и у вас есть длинные истории моделей с большим количеством событий для перезагрузки. Болтинг на снимке может быть намного более разумным, чем попытка реорганизовать вашу историю моделей в более мелкие потоки. OK ....
Магазин моментальных снимков модель - в любой момент времени вы должны убрать модель и перестроить ее из сохраненной истории в магазине событий.
С точки зрения хранилища хранилище моментальных копий является кешем; если моментальный снимок не доступен, или если сам магазин не отвечает в SLA, вы хотите вернуться к переработке всей истории событий, начиная с начального состояния семени.
Интерфейс поставщика услуг будет выглядеть как
interface SnapshotClient {
SnapshotRecord getSnapshot(Identifier id)
}
SnapshotRecord собирается предоставить в хранилище информацию, необходимую для потребления снимок. Это будет включать как минимум
- в памяти что позволяет репозитарий регидратации snapshotted государству
- описания последнего события, обрабатываемого снимок проектор при создании снимка.
модели будет затем повторно увлажняет snapshotted состояния от сувенира, загрузите историю из хранилища событий, сканирование назад (то есть, начиная с самим последним события) ищут события документированных в SnapshotRecord , затем примените последующие события по порядку.
Сам SnapshotRepository может быть магазин ключ-значение (не более одной записи для любого данного идентификатора), но реляционная база данных с поддержкой больших двоичных объектов будет работать отлично слишком
select *
from snapshots s
where id = ?
order by s.total_events desc
limit 1
Проектор снимок, и репозиторий они должны согласовать, каково должно быть состояние объекта для всех возможных историй, им нужно согласиться с тем, как де-гидратировать память, и им нужно согласовать, какой идентификатор будет использоваться для определения моментального снимка ,
Плотная муфта также означает, что вам не нужно беспокоиться, особенно о схеме для памятника; массив байтов будет в порядке.
Однако им не нужно соглашаться с предыдущими воплощениями самих себя. Snapshot Projector 2.0 отбрасывает/игнорирует любые снимки, оставленные Snapshot Projector 1.0 - хранилище моментальных снимков просто кеш в конце концов.
Я разрабатываю приложение, которое, вероятно, будет генерировать миллионы событий в день. что мы можем сделать, если нам нужно, чтобы восстановить вид 6 месяцев спустя
Одним из наиболее убедительных ответов здесь является модель времени явно. Есть ли у вас одна организация, которая живет в течение шести месяцев, или у вас есть 180 объектов, каждый из которых живет в течение одного дня? Учет является хорошей областью для ссылки здесь: в конце финансового года книги закрыты, а книги следующего года открываются с переносом.
Yves Reynhout часто говорит о времени моделирования и планировании; Evolving a Model может быть хорошей отправной точкой.
Системы, которые я сегодня работаю, требуют высокой производительности, но не доступности 24x7. Поэтому в ситуации, когда я закрыл свою систему для maintenace и перезапустил ее, мне пришлось бы загружать и перерабатывать весь мой магазин событий, так как моя новая система не знает, какие агрегированные идентификаторы обрабатывают события. Мне нужна лучшая отправная точка для перезагрузки моих систем. – Mikhas
А что, если вы не сохраните всю историю? на самом деле я разрабатываю приложение, которое, вероятно, будет генерировать миллионы событий в день. что мы можем сделать, если нам нужно перестроить представление через 6 месяцев? Не могли бы вы дать совет? –
См. Правки, и разговор Рейнхаута. – VoiceOfUnreason