IMDG (Hazelcast) 如何加强数据一致性
How IMDG (Hazelcast) enforce data consistency
我读过 CAP 定理和 NoSQL 数据最终一致性问题。据我了解,您可以实现完全一致性或完全可用性,但不能同时实现。因此,如果您获得更高的性能,您可能会得到陈旧的数据/部分交易。据我了解,目前还没有针对集群数据存储的解决方案。
另一方面,Hazelcast 声称它强制执行 IMap
的完全一致性。
问题: Hazelcast 如何强制实现数据的完全一致性?这可能是因为它基于 RAM 并且可能不关心可用性(意味着无论如何都提供了可用性)?
我只能回答 Hazelcast。我们对数据进行了分区,这意味着我们对密钥进行序列化,获取序列化字节数组的哈希码并使用 partitionCount 生成 mod。
partitionId = hashcode(serialize(key)) % partitionCount
现在每个 partitionId 都注册到单个节点(+ 备份节点)。如果您对给定的键进行变异操作,则此操作将发送给分区的所有者,他会一个接一个地应用一个操作。因此,您始终对每个分区有一个一致的视图,并且获取操作就像其他所有操作一样排队,因此对于单个分区,没有机会看到过时的数据。
如果您使用近缓存,您肯定会在所有者已经应用突变但近缓存尚未失效(网络延迟)的时间窗口中结束。
我希望这能回答你的问题:)
我读过 CAP 定理和 NoSQL 数据最终一致性问题。据我了解,您可以实现完全一致性或完全可用性,但不能同时实现。因此,如果您获得更高的性能,您可能会得到陈旧的数据/部分交易。据我了解,目前还没有针对集群数据存储的解决方案。
另一方面,Hazelcast 声称它强制执行 IMap
的完全一致性。
问题: Hazelcast 如何强制实现数据的完全一致性?这可能是因为它基于 RAM 并且可能不关心可用性(意味着无论如何都提供了可用性)?
我只能回答 Hazelcast。我们对数据进行了分区,这意味着我们对密钥进行序列化,获取序列化字节数组的哈希码并使用 partitionCount 生成 mod。
partitionId = hashcode(serialize(key)) % partitionCount
现在每个 partitionId 都注册到单个节点(+ 备份节点)。如果您对给定的键进行变异操作,则此操作将发送给分区的所有者,他会一个接一个地应用一个操作。因此,您始终对每个分区有一个一致的视图,并且获取操作就像其他所有操作一样排队,因此对于单个分区,没有机会看到过时的数据。
如果您使用近缓存,您肯定会在所有者已经应用突变但近缓存尚未失效(网络延迟)的时间窗口中结束。
我希望这能回答你的问题:)