イベントソーシングは、多くのもののボーナスとして賞賛されます。イベント履歴/監査証跡、完全かつ一貫性のあるビュー再生成などが可能です。私はファンです。しかし、これらは読込み側の実装の詳細なので、別のサブスクライバとしてイベント・ストアを読込み側に完全に移動することによっても同じことを達成できます。イベントストアを書き込み側にする理由は何ですか?
は、ここではいくつかの考えです:
- ビュー/自身がイベント・ストアを気にしないでくださいdenormalizers。彼らはドメインからのイベントを処理するだけです。
- イベント・ストアを読み取り側に移動すると、イベント履歴/監査が提供されます。
- イベント・ストアからビューを再生成することはできます。これを除いて、書込みモデルのリークである必要はありません。モデルシチズンシップを読む
ここでは、書き込み側でそれを維持するための1つの技術的な議論のようです。これはGreg Youngのhttp://codebetter.com/gregyoung/2010/02/20/why-use-event-sourcing/:
です。ただし、現在の状態のスナップショットを保存しているものを使用することにはいくつかの問題があります。最大の問題は、データに2つのモデルを導入したことです。イベントモデルと現在の状態を表すモデルがあります。
私が興味深いのは、「スナップショット」という用語です。このスナップショットは、最近ではイベントソーシングにおいても顕著な用語となっています。書き込み側にイベント・ストアを導入すると、集約のロードに若干のオーバーヘッドが加わります。どのくらいのオーバーヘッドを議論することができますが、スナップショットから集約をロードするという概念と、スナップショット以降のすべてのイベントが存在するので、それは明らかに認識されている、または予期された問題です。だから今私たちは2つのモデルを持っています。それだけでなく、私が見てきたスナップショットの提案は、インフラストラクチャのリークとして実装されることを意図しています。
スナップショットが作成された後、スナップショットの前のイベントは、書き出しの観点からは100%になりません。ただし、読み込み側を再構築する場合は例外です。それは間違っているようだ。
別のパフォーマンス関連トピック:ファイルストレージ。時にはエンティティに大きなバイナリファイルを添付する必要があります。概念的には、これらはエンティティに関連付けられていることもありますが、エンティティであることもあります。これらをイベント・ストアに入れると、エンティティーをロードするたびに、そのデータを物理的にロードする必要があることを意味します。それは十分に悪いですが、数百または数百を大きな集合体で想像してください。私がこれまで見てきた答えはすべて、基本的に弾を噛んで、ファイルにuriを渡すことです。それは暴走であり、分散システムを弱体化させます。
次にメンテナンスがあります。ビューを再構築するには、イベントストアを含むプロセスが必要です。これで、今作成したビューの保守タスクは、イベント・ストアを使用して書き込みモデルをさらにバインドします。永遠に。
読み込みモデルと書き込みモデルのユースケースが基本的に両立しないというCQRSの要点はありませんか?では、なぜ読み込みモデルのものを書き込み側に置き、柔軟性とパフォーマンスを犠牲にして、それらを再度バックアップするべきなのでしょうか。なぜ時間を費やすのですか?
私は混乱しています。私が座っている場所からのすべての点で、イベントストアは、モデルの詳細を読み込んだものとして意味があります。イベント・ストアを維持することで多くの利点が得られますが、書き込み側の永続性を過度に抽象化せず、柔軟性とパフォーマンスを低下させる可能性があります。漏れやすい抽象化とメンテナンスのタスクによって、読み取り/書き込み側をバックアップしないでください。
だから誰かが私に説明してください1つ以上の説得力のある理由は、書き込み側にそれを維持する?あるいは、なぜそれがメンテナンス/報告の懸念事項として読者側に行かないべきか?再び、私は店の有用性に疑問を呈していない。ちょうど行くべきであるところ:
イベントでのスナップショットは、「新しい概念」ではありません。これは、2006年のイベントソーシングに関する私の最初の話です。 –