при использовании отдельной таблицы, одна для «Запись, обновление и удаление» и другая для операции чтения.Итак, как данные синхронизируются из таблицы записи в таблицу чтения.
Вы проектируете асинхронный процесс, который понимает, как преобразовать данные из представления «запись» в представление «чтение», и вы разрабатываетепланировщик, чтобы решить, когда этот асинхронный процесс будет запущен.
Отчасти дело в том, что это просто сантехника, и вы можете выбрать любую сантехнику, которая вам подходит, которая удовлетворяет вашим операционным потребностям.
СобытиеSourcing
На счастливом пути каждый «поток событий» представляет собой последовательность неизменяемых событий только для добавления.В том случае, если вы применяете инвариант домена к содержимому потока, у вас обычно будет политика конфликта «победитель первого писателя».
Но «поток» является официальной копией событий.Также могут быть неавторизованные копии (например, события, опубликованные в шине сообщений).Все они, как правило, являются неизменяемыми.
В некоторых доменах, где вам нужно беспокоиться о конфиденциальности и «праве быть забытым», вам могут потребоваться средства, позволяющие удалить информацию из ранее сохраненного события.В зависимости от вашего выбора дизайна вам могут понадобиться изменяемые события.
СУБД
Для многих видов запросов, особенно тех, которые охватывают несколько потоков событий, возможность описатьжелаемые результаты с точки зрения отношений значительно облегчают задачу программирования.Таким образом, общая схема состоит в том, чтобы иметь асинхронный процесс, который считывает информацию из потоков событий и обновляет СУБД.Обычно получаемое преимущество состоит в том, что вы получаете запросы с малой задержкой (но данные, возвращаемые этими запросами, могут быть устаревшими).
СУБД также может быть использована в качестве основы проектирования самого хранилища событий / хранилища сообщений.События обычно записываются в виде данных BLOB-объектов, а интересные метаданные представляются в виде дополнительных столбцов.Хранилище сообщений, используемое Eventide-Project, основано на postgresql.
NoSQL
Опять же, потенциально может использоваться как кэш читаемых представлений или как хранилище сообщенийв зависимости от ваших потребностей.Хранилище событий может быть примером хранилища сообщений NoSQL.
Обмен сообщениями
Обмен сообщениями - это шаблон для временной развязки;возможность сохранять / извлекать сообщения в стабильной центральной области дает возможность выключить производителя сообщений, не блокируя его, и наоборот.В хранилищах сообщений также есть некоторая абстракция - производитель сообщений не обязательно знает всех потребителей, а потребитель не обязательно знает всех производителей.
Мой вопрос касается источников событий,Требуется ли нам хранить только события неизменяемой последовательности и где их хранить?
В источнике событий авторитетное представление состояния - это последовательность событий - ваша надежная копия этой последовательности событий - этоКнига истины.
Что касается того, куда они идут?Ну, это будет зависеть от вашей архитектуры и выбора хранилища.Вы можете сами управлять файлами на диске, вы можете записывать их в свою собственную СУБД;вы можете использовать СУБД, разработанную кем-то другим, вы можете использовать хранилище документов NoSQL, вы можете использовать выделенное хранилище сообщений.
Может быть несколько хранилищ - например, в архитектуре микросервиса, службепринимающие заказы могут отличаться от службы, которая отслеживает их выполнение, и каждый из них может записывать события в разные устройства хранения.