現在、SQLバックアップされたイベントストア(一般的な2テーブル実装)を使用しています。チーム内の一部の人々は、イベントストアを書き込み専用に使用すると、状況が少し遅くなる可能性があるため、ここでスナップショットを追加する代わりに、各アグリゲートの完全な整合性のある(イベントストリームの)スナップショットを実際に維持するための提案が行われましたJSON形式の最新の状態です。システム上のすべてのクエリは、ES(書き込み)側から最終的な整合性の方法で更新される典型的なSQLデータベースを使用して、読み取り側で実行されます。イベントストアの各集約の最新バージョンのスナップショットを保持
このようなシステムを設置することで、パフォーマンスストアの問題をすべて取り除きつつ、イベントストアを利用するメリットを享受することができます。私たちは現在、「時間旅行」の機能を利用していませんが、遅かれ早かれそのようになるでしょう。
これは良いアプローチですか?私の中には不快なものがあります。たとえば、ある種の時間移動機能が必要な場合、各集約のイベントストリームにスナップショットを配置しないとパフォーマンスが低下することがあります。もちろん、集約インスタンスごとの最新のスナップショットと、イベントストリーム全体のスナップショットの両方を持つことができます。
このルートを終了する場合は、特定の集約のスナップショット更新を、同じ集約のイベント更新に対してトランザクションにするか、イベントを更新するだけで最終的に一貫性のある方法で更新する必要がありますスナップショット?
このアプローチの弱点は何ですか?誰かが種類の何かを試したことがありますか?
偉大な答え。私の経験では、うまく設計されたきめ細かい集約がイベントを発生させにくく、スナップショットを必要としにくい傾向もあります。 – guillaume31