Источник событий: - это способ разработки приложения, в котором вся информация сохраняется в виде событий. Для получения дополнительной информации см. здесь
Пример: Если мы разрабатываем банковское программное обеспечение, события, которые мы храним, будут выглядеть примерно так:
- Пользователь1, транзакция: 100, ссылка: "xyz", Дата: 11 октября 2018 года
- Пользователь 1, транзакция: -100, ссылка: "xyza", Дата: 18 октября 2018
- ии так далее ...
Теперь, если Пользователь1 хочет дебетовать его / ее счет, мы извлекаем все события из его / ее потока и воспроизводим, чтобы получить баланс. И если он / она имеет достаточный баланс, то мы дебетуем его / ее счет, добавив одно дебетовое событие.
Этот процесс занимает немного времени, и обычно он выполняется только тогда, когда необходимо выполнить запись в систему (записи выполняются реже, чем чтение в большинстве систем). Хотя это занимает немного времени, оно дает нам преимущество в аудите, безопасности и аналитике.
Трудности в системе источников событий связаны с запросами. Если нам нужно получить список пользователей, которые внесли более 10000 единиц в квартал, то это будет сложно и отнимает много времени, так как нам нужно воспроизвести поток каждого пользователя. Чтобы решить эту проблему, мы можем использовать CQRS.
CQRS: - это схема разработки программного обеспечения, в которой запись выполняется одним приложением, а чтение - другим приложением. Более подробная информация доступна здесь . Приложение записи и приложение чтения могут связываться друг с другом (может быть посредством обмена сообщениями). Приложение read может поддерживать собственную базу данных и хранить информацию в удобной для запроса форме. Поэтому, когда приложение read получает сообщение, оно преобразует сообщение, которое подходит для его собственной схемы БД, и сохраняет его.
Приложение чтения в конечном итоге (вероятно, через пару секунд) будет соответствовать приложению записи. Приложение чтения сможет очень быстро обрабатывать запросы, поскольку для него разработана схема базы данных.
Теперь отвечаю на ваш вопрос:
- Существуетнемного времени, затраченного на обновление данных в приложении записи. Приложение записи воспроизводит все события (или события после моментального снимка) перед любым обновлением. Пока агрегаты невелики, и мы используем правильные методы моментальных снимков, производительность неплохая.
- Модель чтения имеет свою собственную базу данных, схема разработана для удовлетворения запросов. Много раз мы не беспокоимся о избыточных данных в базе данных для чтения. Это сделано для быстрого выполнения запросов.
- Мы могли бы принять решение выбросить данные приложений (моделей) для чтения и перестроить их в другую форму для соответствия новым запросам, поскольку источником правды являются события, хранящиеся в приложении записи (модель).