2012-05-04 7 views
1

私が所有しているサイトは、うまく動作している単純なCQRSアーキテクチャを持っています。イベントはさまざまなサブスクライバによって公開され、収集されます。そのうちの1つは、レポートデータベースを同期させます(RavenDb内)。クエリデータベースの再生成

たとえば、自分のレポートデータベースが壊れている/紛失しているとします。イベントソーシングでは、イベントを再生してレポートデータベースを再構築できますが、私は[現在]イベントソーシングを使用していません。私は、リレーショナルストアへのシンプルなnHibernate Persisterを持っています。解決策は、リレーショナルストア(たとえば、30xPersonLikedBlogPostEventの後にPersonCreatedEventなど)に基づいてすべてのイベントを送信する「再生」タイプのスクリプトを作成することですか?イベントソースと同じことを本質的にしていますが、イベントはリレーショナルモデルから推測されます。

ここでは、メンテナンス性とDRとしての種類は明らかに重要です。

答えて

0

これを実現するために、本格的なイベントソーシングソリューションを実装する必要はありません。すべてのイベントをイベントログに保存するだけで、必要に応じてイベントログを取得して再生することができます。

1

イベントを保存していない場合、再生成はできません。リレーショナル・ストアを使用して「作成済み」イベントのみを生成すると、この「再生成」のメリットを得ることはできません。

+0

ありがとうございます。私は、オブジェクト履歴などからの再生のメリットについてはあまり心配していませんが、RavenDbレポートデータベースを持つことは、サイトのパフォーマンスSLAにとって重要です。私はイベントソーシングに移っています。よろしく – sjhuk

0

私はこのための簡単な/簡単な解決策はないと思います。これは、リレーショナル・データからイベント・ソースにデータを移行する場合には、実際に行う必要があります。あなたが言ったように、あなたができる唯一のことは、それぞれのエンティティスクリプトのために、妥当なシーケンス(すなわち、CreatedEventと他の状態変化イベント)でイベントをスクリプト化することです。しかし、あなたがこれらのイベントをキャプチャするとき、私はそれらを保存して、将来それらを再実行することができます。

0

サーバーに送信されたすべてのコマンド(ログなど)を保存した場合、すべてのコマンドを最初のコマンドから最後のコマンドまでバスに送信することができ、すべてのクエリ側を再現できます。それはコマンドソーシングです。 コマンドソーシングを使用すると、準備ができたらいつでも簡単にイベントソーシングに行くことができます。

関連する問題