1

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

另一方面,Hazelcast 声称它对IMap.

问题: Hazelcast 如何强制执行完整的数据一致性?这是否可能,因为它基于 RAM 并且可能不关心可用性(意味着无论如何都提供可用性)?

4

1 回答 1

3

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

partitionId = hashcode(serialize(key)) % partitionCount

每个 partitionId 现在都注册到单个节点(+ 备份节点)。如果您对给定的键有变异操作,则此操作将发送给分区的所有者,他将一个接一个地应用一个操作。因此,您始终对每个分区都有一致的视图,并且 get 操作就像其他所有操作一样排队,因此对于单个分区,没有机会看到陈旧的数据。

如果您使用近缓存,那么您肯定会在一个稍微的时间窗口中结束,在该时间窗口中,所有者已经应用了一个突变,但近缓存还没有失效(网络延迟)。

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

于 2015-02-21T14:10:47.477 回答