現在、CQRSとイベントソーシングアーキテクチャを評価しています。この種の設計を使用することのメンテナンスへの影響が何であるかを理解しようとしています。私が答えを見つけるのに苦労している2つの質問はこれです:
1)アプリケーションが起動してしばらく実行された後、ReadModelデータベースのViewModelにフィールドを追加する新しい要件がある場合はどうなりますか?たとえば、CustomerList ViewModelには顧客の郵便番号が必要ですが、以前は必要ありませんでした。したがって、追加の列はViewModelデータベースに簡単に追加できますが、これはどのように入力されますか?私が見る限り、唯一の方法は、読み取りデータベースをクリアし、すべてのイベントを最初から再生して、ReadModelDatbaseを構築することです。しかし、アプリケーションが数か月または数年にわたって稼働している場合はどうなりますか(私たちが望むように)。これは、郵便番号列のデータを追加するためだけに、何百万ものイベントを再生する可能性があります。
技術的な理由でReadModelデータベースが同期しなくなった場合、または新しいReadModelデータベースを追加したい場合も、同じ懸念があります。アプリケーションが古く、使用するほど、最新のreadmodelを元に戻すのは難しく、費用もかかるようです。それとも私はどこかでトリックを逃していますか?ReadModelスナップショットのようなものですか?
2)読み取りデータベースをバックアップするために何百万ものイベントがすべて再生された後、一部のデータが期待されたものと一致しない場合(つまり、見た目が間違っている場合)はどうなりますか。おそらく、イベントの保存または非正規化ルーチンのどこかにバグが原因である可能性があります(コーディングで信頼できることが1つあるとすれば、それはバグのようです)。これをデバッグする方法!それは不可能な仕事のようです。または多分、もう一度、私はトリックを逃しています。
このようなシステムをしばらく実行している人から、メンテナンスとアップグレードのパスがどのように機能したかを聞いてみたいと思います。
いつでもご入力いただきありがとうございます。