2011-06-29 11 views
1

CQRSパターンの独自の実装を使用して、古いプロジェクトをCQRSに移行しています。この移行を始めた主な理由は、n層アーキテクチャが引き起こした混乱を取り除くことでした。しかし、このプロジェクトでは他にも多くの場合、リレーショナルデータストアを使用しています。リレーショナルデータをイベントストアに移行する

このプロセスの現在の状態は、変更を行うコマンドと、クエリを分離するクエリオブジェクトがあることです。つまり、クライアントからサーバーまで、変更のイベントは公開されませんが、非正規化された読み込みストアはありませんが、CQRS-ishによるデータの変更とクエリの方法があります。私は私の "ドメインモデル"としてかなり貧血的なDTOを持っていることに言及する必要があります。すべての振る舞いは、ハンドラ、管理者、そしてそれらの恐ろしい層のもので、n層層全体に分散されました。

私は次のステップに進む方法を知りたいです。私が今思うのは、その行動を担当するドメインモデルを構築することです。その理由は、私が質問に私をもたらしてくれる真実の源泉としてイベントストアを使い始めたいということです:

リレーション・データ・ストアからイベント・ストアにデータを移行するにはどうすればよいですか?

私は非常に重要なデータを持つ非常に正規化されたデータモデルを持っています。これは移行する必要があります。私は死んでもそのデータから何の意図も捉えることは期待できないと理解していますが、どうすればいいですか?負荷の高い移行コマンドを作成する必要がありますか?これからあなたの経験を聞くといいですね。

答えて

5

私はこれを試す機会があっていませんでしたが、私は試してみたかった何かが段数で動作します:

  1. は、まず、そのシステムが希望するすべてのイベントをマップ必要。
  2. 次に、リレーショナルデータベースにイベントを表すビューを導入します。
  3. ビューから選択して正しいイベントオブジェクトを作成するカスタムユーティリティを作成します。
  4. カスタム・ユーティリティーに、イベント・オブジェクトを正しい順序でイベント・ストアに書き込ませます。
  5. 最後に、イベントストアから非正規化ビュー・モデルをリフレッシュすることを確認してください。

イベントがイベントストアに書き込まれる順序はちょっと難しいと思いますが、ちょっと考えなければなりません。しかし、これが移行プロセスであることを見れば、ドメインの最終状態が正しい限り、それほど重要ではないと思う。リレーショナル表にタイムスタンプがある場合、これが役に立ちます。

私は、リレーショナルデータが過去に起こったアクションのドメインを表しているため、コマンドオブジェクトを作成するのではなく、イベントオブジェクトを構築する方が適切だと判断しました。

0

最初のステップでは、ドメインドリブンデザインの原則に従ってリッチドメインモデルを作成して、集約境界を描画します。イベントソーシングへの移行はさらに簡単になります。このテーマについてHere areいくつかの記事

0

Idは、これと、提案されている解決法とは異なっています。 2つの異なるプロジェクトでこの移行を2回実行しました。

コマンドに書き込みを実行させる最初のステップは、読み込みを行うことが良い最初のステップです。

次に行うべきことは、書き込みを行うコマンドと同じコマンドからイベントを発生させることです。イベントの開催に慣れてください。

これは、単にイベントハンドラを作成してEventStoreにプッシュすることを意味します。

あなたがイベントをコミットし始めるプロジェクトの初期段階では、アプリケーションの履歴が増えます。

ここで、コマンドハンドラで正規化されたデータベースへの書き込みを続行します。

イベントを発生させるコマンドハンドラが2つあると、次の手順は非常に簡単です。発生したイベントをリッスンし、コマンドハンドラが行ったのと同じ書き込み操作を単に実行するイベントハンドラ/非正規化器を構築します。

あなたが今行ったことは、WRITEの責任を非正規化器に移して、コマンドハンドラから離れさせることでした。

それは基本的に私が言ったように、私はこれを2回やったことをお勧めします。

データベース内の既存のデータをイベントに移行することは少し難解です。あなたはそのデータを現在の状態と考える必要があります。あなたができることはすべてあなたが作成したユーティリティを使ってビルドしてコミットします。システム内のすべてのデータのイベントを作成します。

たとえば、既存のアカウントテーブルを移行するには、AccountCreatedEventを作成し、テーブルの各アカウントのすべてのデータをコミットします。

+0

あなたはどのようなボリュームを扱っていましたか、どれくらいかかりましたか? – Sinaesthetic

+0

Howdy、プロジェクトの1つのデータベースは11ギガバイトでした。 100万件以上の注文を受けたecommサイトでした。 – boz

関連する問題