我目前正在为我的Go Actor库实现EventSourcing。我现在遇到的问题是,当执行元重新启动并需要重放事件日志中的所有状态时,查询可能会返回不一致的数据。我知道我可以使用MutationToken解决这个问题
但是,如果我这样做,我将被迫按顺序写入所有事件,即最后一个事件。
这样,最后一个事件的突变令牌就足以获得特定参与者的所有一致数据。
然而,这是非常慢的,按顺序写入大约10000个事件,在我的设置中需要大约5秒。
如果我使用go例程编写这10000个异步数据,我可以在不到一秒的时间内写入所有数据。但是,然后写入是不确定的顺序,我可以知道我可以信任哪个突变令牌。例如,由于进行例程调度AFAIK,事件999可以在事件843之前写入。
我在这里有什么选择?
发布于 2016-10-04 09:47:28
从技术上讲,MutationToken和异步操作并不是相互排斥的。这也许可以在不更改客户端的情况下完成(我不确定),但这里的关键是获取所有MutationToken响应,然后使用所有这些响应发出每个vbucket最高编号的查询。
这里的关键是,给定一个MutationToken,您可以向其添加其他can。我没有直接看到这样做的方法,但因为在内部它只是一个地图,它应该是相对简单的,我相信我们(Couchbase)会做出贡献来做到这一点。在最低层,它只是在发出查询时提供给查询的vbucket序列的映射。
https://stackoverflow.com/questions/39815387
复制相似问题