IMDG(Hazelcast)如何实施数据一致性

时间:2015-02-21 11:36:49

标签: java hazelcast in-memory eventual-consistency nosql

我读过CAP定理和NoSQL数据最终一致性问题。据我所知,您可以实现完全一致性或完全可用性,但从不两者兼顾。因此,如果您获得更多性能,您可能会获得过时的数据/部分事务。据我所知,目前还没有针对集群数据存储的解决方案。

另一方面,Hazelcast声称它强制IMap完全一致。

问题: Hazelcast如何实施完整的数据一致性?这可能是因为它基于RAM并且可能不关心可用性(无论如何都提供可用性)?

1 个答案:

答案 0 :(得分:3)

我可以回答Hazelcast。我们对数据进行了分区,这意味着我们将密钥序列化,获取序列化字节数组的哈希码,并使用partitionCount创建一个mod。

partitionId = hashcode(serialize(key)) % partitionCount

现在每个partitionId都注册到一个节点(+备份节点)。如果您对给定密钥进行了变异操作,则此操作将发送给分区的所有者,并且他将一个操作应用于另一个操作。因此,每个分区始终具有一致的视图,并且操作与其他所有操作一样排队,因此对于单个分区,没有机会看到已标记的数据。

如果你使用near-caches,肯定你会在一个稍微有点时间的窗口中,所有者已经应用了一个变异,但是近缓存尚未失效(网络延迟)。

我希望这能回答你的问题:)