Hazelcast:确保相关对象物理存储在同一成员上
Hazelcast: make sure related objects are physically stored on same member
我有 3 个分布式地图,其中对象共享一个 属性 - identifier
。此 identifier
用作一个地图的键,而其他 2 个地图使用集群范围的全局 ID 作为键。还有一个 Map-Reduce 作业正在组合与此 identifier
对象相关的内容,并将结果存储到另一个地图中。这个想法是尽量减少集群间的网络流量,因此作业只与正在执行的一个成员通信。
问题是:我是否需要执行任何额外操作来确保不同分布式地图的分区物理存储在一个成员上?
PartitionAware 会为您做这件事。
如果要保证三个对象驻留在同一个分区中,它们的键 类 应该实现 PartitionAware 和 return 来自 getPartitionKey()
方法。
例如,让同一个家庭的所有成员聚在一起:
public class Person implements PartitionAware, Serializable {
private String firstName;
private String lastName;
public Object getPartitionKey() {
return this.lastName;
}
您可以通过 hazelcastInstance.getPartitionService().getPartition(key).getPartitionId()
验证分区
分区 0 包含每个映射 X、映射 Y、映射 Z 的第一部分。分区 1 包含下一部分等。
我有 3 个分布式地图,其中对象共享一个 属性 - identifier
。此 identifier
用作一个地图的键,而其他 2 个地图使用集群范围的全局 ID 作为键。还有一个 Map-Reduce 作业正在组合与此 identifier
对象相关的内容,并将结果存储到另一个地图中。这个想法是尽量减少集群间的网络流量,因此作业只与正在执行的一个成员通信。
问题是:我是否需要执行任何额外操作来确保不同分布式地图的分区物理存储在一个成员上?
PartitionAware 会为您做这件事。
如果要保证三个对象驻留在同一个分区中,它们的键 类 应该实现 PartitionAware 和 return 来自 getPartitionKey()
方法。
例如,让同一个家庭的所有成员聚在一起:
public class Person implements PartitionAware, Serializable {
private String firstName;
private String lastName;
public Object getPartitionKey() {
return this.lastName;
}
您可以通过 hazelcastInstance.getPartitionService().getPartition(key).getPartitionId()
分区 0 包含每个映射 X、映射 Y、映射 Z 的第一部分。分区 1 包含下一部分等。