1

結果整合性によって同時実行を処理する方法は? または、結果整合性によってデータの整合性を確保する方法を尋ねることができますか?

CQRS とイベント ソーシングによって、結果整合性とは、ドメイン イベントをキューに入れ、プロジェクションであるイベント ハンドラーを設定することを意味します。これらのプロジェクションは、非同期の方法で読み取りキャッシュを更新します。その読み取りキャッシュを使用して検証すると、検証の基にした情報がまだ有効であることを確認できなくなります。コマンドを送信すると、未処理 (または未投影?) のドメイン イベントがキューに存在する可能性があり、これにより検証の結果が変わる可能性があります。つまり、これは単なる別のタイプの同時実行です...これらのまれな同時実行の問題をどのように処理すると思いますか? ドメイン イベントは既にストレージに保存されているため、何もすることはできません。イベント ストレージから削除することはできません (書き込みは 1 回だけであることが想定されているため)。私たちは決心し、あなたのリクエストをキャンセルしました。それともできますか?

アップデート:

イベントストレージによる同時実行を処理するための可能な解決策:

書き込みモデル別

if
    last-known-aggregate-version < stored-aggregate-version
then
    throw error
else
    execute command on aggregate
    raise domain-event
    store domain-event
    ++stored-aggregate-version (by aggregate-id)

読み取りモデル別

process query
if
    result contains aggregate-id
then
    attach read-cached-aggregate-version

投影による

process domain-event
read-cached-aggregate-version = domain-event-related-aggregate-version (by aggregate-id)
4

1 に答える 1