2

@Jonathan Oliver の EventStore の SQL 永続性がCommitSequence、重複コミットを検出する基準の 1 つとして使用されるのはなぜですか? なぜ十分ではないStreamIdのですか?CommitId

以下の SQL を参照してください。

SELECT COUNT(*) 
FROM Commits
WHERE StreamId = @StreamId
  AND CommitSequence = @CommitSequence
  AND CommitId = @CommitId

この SQL ステートメントは からのものSqlPersistenceEngine.DetectDuplicate()です。DuplicateCommitExceptionをスローするか、単に をスローするかを決定するために使用されConcurrencyExceptionます。

4

1 に答える 1

1

あなたのSQLが何であるかわかりません。

CommitSequence が一意のインデックスに参加する理由は、2 人が同時に v5 を変更している場合、1 人が 1 つのイベントで v6 を書き、別の人が別のイベントで v6 を書く可能性があるためです。

場合によっては、すべてのライターがコミット Id の共通のソースを持っていますが、非常に多くの場合 (そして共通ドメインはこれを行います)、Guidコミット Id としてランダムを生成するだけであり、その場合でも競合を検出する必要があります。

GUID を悪用して StreamVersion (上記の v6) をエンコードする固定シーケンスを作成し、コミット Id を生成して冗長にすることができると思いますが、私にとっては明らかに必要で便利です。

ところで、NuGetパッケージのreadmeを必ず読んでください-このことのほとんどはIMOでかなりよく説明されています。

于 2013-04-25T00:03:58.827 に答える