EventStore DuplicateCommit查询

时间:2013-04-24 13:49:09

标签: event-store

为什么@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

1 个答案:

答案 0 :(得分:1)

不确定您的SQL是什么。

CommitSequence参与唯一索引的原因是,如果2个人正在编写同时修改v5,可能会编写一个带有1个事件的v6,而另一个用不同的事件编写v6。

在某些情况下,所有编写者都有一个共同的Commit Ids源,但是经常(和Common Domain这样做),只需生成一个随机Guid作为提交ID,在这种情况下你仍然需要要发现的冲突。

我想有人可能会滥用GUID来创建一个编码StreamVersion的固定序列(上面的v6)来生成提交ID以使其冗余,但对我而言,它显然非常需要和有用。

请务必阅读NuGet包BTW中的自述文件 - 大部分内容都能很好地解释为IMO。