我正在尝试构建CQRS / ES系统。我正在使用Cassandra作为事件存储。当前,没有任何字段可以告诉我事件的顺序号(使用UUID作为事件ID)。
除了创建数据投影/快照时,我实际上并不需要查询中的序列号。我对如何获得范围内的事件有疑问(例如,如果我有事件1-6的投影,如何获得事件7-12来创建投影)?
我确实有时间戳,但是我正在设计自己的系统,就好像它有很多并发用户一样,在这种情况下,时间戳(即使包括纳秒级)也可能不可靠以获得事件范围。
由于在分布式系统中(添加多个节点同时写入)添加序列/计数器并不是很理想,因此我考虑使用另一个表将事件UUID与序列号相关联。填充事件表后,将填充该表,然后我可以使用该表使用事件范围来创建投影。此单独的表可以使用locks / be-slow来确保正确的序列号,因为我不会立即需要该表中的数据。
尽管要用顺序维护实际表和其他表之间的一致性确实很棘手(例如,当某些东西被添加到原始事件表时,它无法添加到序列中的场景)。你们如何看待这种方法?非常感谢有更好的方法。