Масштабирование, многократное чтение баз данных с шаблоном CQRSish - PullRequest
5 голосов
/ 19 марта 2011

Я использую шаблон стиля CQRS (No Event Sourcing). Я просто разделяю свои операции чтения и записи на две отдельные границы приложения.

В данный момент приложение работает с одной базой данных SQL 2008. Я хотел бы добавить несколько баз данных для чтения, чтобы распределить рабочую нагрузку, поскольку объем начинает расти.

Мне нужно решение в SQL 2008, где я могу обновить одну базу данных и реплицировать / распространять изменения в реальном времени на другие узлы. Это должно быть только односторонним распространением, поскольку приложение будет выполнять запись только в одну «основную» базу данных.

Я читал об одноранговой репликации транзакций. Кто-нибудь, кто использовал это, сколько задержек при обновлении дочерних узлов?

Есть ли другие решения?

1 Ответ

3 голосов
/ 20 марта 2011

Если вы не используете источник событий на стороне домена / команды, это нормально.Но это не обязательно должно помешать вам хранить все события на стороне чтения в некоторой таблице «событий».При этом он позволяет вам уничтожить таблицы модели представления и восстановить из всех событий, хранящихся в таблице «events» в вашей базе данных модели чтения.

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

Это позволяет вам иметь две базы данных чтения, которые являются родственными, нокоторые не разговаривают друг с другом.Они просто прослушивают события из домена, обновляют таблицы считанных моделей и добавляют полученные события в какую-то локальную таблицу «событий».

...