Источник событий без CQRS - PullRequest
0 голосов
/ 03 июля 2018

Я знаю, что CQRS может быть реализовано с или без event sourcing, но работает ли другая сторона? event sourcing без CQRS имеет смысл? Если да, то как это должно быть реализовано?

Ответы [ 4 ]

0 голосов
/ 09 мая 2019

CQRS - это разделение операций чтения и записи. Операции записи требуют таких вещей, как блокировка, гарантированный порядок и всегда последнее состояние. В классических системах (реляционных базах данных) вы также даете эти гарантии для операций чтения, что влечет за собой огромное влияние на производительность и большие проблемы с масштабируемостью. Вот почему в CQRS вы предоставляете операциям чтения отдельную копию данных, которая оптимизирована для быстрого чтения, например, он денормализован и помещен в более эффективные и более быстрые системы (например, кэш-память), я бы назвал это «представлением чтения [по данным системы]».

CQRS работает без ES, поскольку вы можете создать оптимизированное представление чтения из традиционного хранилища данных (например, реляционной базы данных).

ES работает без CQRS, , но только если число событий достаточно мало . Потому что вы храните все изменения системы в базе данных, и каждое чтение должно использовать одну и ту же базу данных и перебирать все события, необходимые для выполнения запроса. В конечном счете, будет слишком много событий, которые нужно прочитать, чтобы ответить, и время, которое потребуется, чтобы ответить, станет слишком длинным.

0 голосов
/ 04 июля 2018

Да, это так.

По сути, вся идея поиска событий заключается в том, чтобы просто сохранить изменения, которые привели к текущему состоянию, вместо сохранения текущего состояния. Таким образом, благодаря источнику событий вы автоматически получаете историю и можете проводить анализ временных рядов ваших данных и пытаться извлечь уроки из прошлого.

Независимо от того, используете ли вы CQRS, это совсем другая история: CQRS заключается в том, чтобы отделить запись в ваше приложение от чтения из него.

Таким же образом вы можете использовать CQRS без источников событий, вы можете использовать источник событий без CQRS. Оба они независимы друг от друга, просто случайно очень хорошо подходят друг другу.

0 голосов
/ 06 июля 2018

Я еще не видел ситуации, когда вы используете ES без CQRS, потому что это будет иметь место только в том случае, если вам не нужны какие-либо возможности запросов / анализа для более чем 1 объекта. В 99% случаев это требование;)

Вам определенно понадобится что-то вроде CQRS, если вы хотите выполнять запросы к нескольким объектам, поскольку вы будете применять другой способ запроса данных, отличающийся от использования источников событий. (если только вы не хотите воспроизводить все события каждый раз, когда делаете запрос ..) Как вы реализуете часть CQRS, пока не ясно. Он просто описывает чтение и письмо - это две разные проблемы, которые решаются по-разному.

Так в общем: нет, это не имеет никакого смысла.

0 голосов
/ 03 июля 2018

Имеет ли смысл источник событий без CQRS?

Да, в том смысле, что CQRS и Event Sourcing являются ортогональными проблемами.

Это то, что говорится на банке - у вас есть одна модель, которая управляет историей, и применяет обновления к этой истории в ответ на команды, и строит из этой истории ответы на запросы.

class BankAccount {
    final History<Transactions> transactions;

    void deposit(Money money) {...}
    Money computeInterestAccruedSince(Date lastReview) { ... }

}
...