EventStore DuplicateCommit Query



为什么@Jonathan Oliver的EventStore的SQL持久性使用CommitSequence作为检测重复提交的标准之一?为什么StreamIdCommitId不充分?

参见下面的SQL。

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

这个SQL语句来自SqlPersistenceEngine.DetectDuplicate()。它用于确定是应该抛出DuplicateCommitException还是只抛出ConcurrencyException

不确定你的SQL是关于什么的

CommitSequence参与唯一索引的原因是,如果两个人同时写v5,一个人可能写一个v6事件,另一个写一个v6事件。

在某些情况下,所有的编写者都有一个共同的提交Id来源,但通常(common Domain就是这样做的),一个只是生成一个随机的Guid作为提交Id,在这种情况下,您仍然希望检测到冲突。

我猜一个人可以滥用guid来创建一个固定的序列,编码StreamVersion(上面的v6)来生成提交Id,使其冗余,但对我来说,这显然是非常需要和有用的。

请务必阅读NuGet包中的自述文件——我觉得大部分内容都解释得很好。

相关内容

  • 没有找到相关文章

最新更新