我有两个定义如下的淡褐色地图。
IMap<EmpKey, Employee> employeeMap = hazelcastInstance.getMap("employeeMap");
IMap<EmpKey, EmployeeFamily> familyMap = hazelcastInstance.getMap("familyMap");
我理解密钥被序列化(转换成byte []数组),然后进行散列,其结果是&#39; mod&#39;没有分区。这为我们提供了存储数据的分区的ID。此外,从每个成员的分区表中,它标识分区的所有者。这样,同一employeeObj
的{{1}}和family
对象都将存储在同一分区中。
我想知道在这一步之后会发生什么。我知道密钥存储为com.hazelcast.nio.serialization.Data类(二进制形式)。会有吗? 为每个哈希映射维护单独的哈希桶,其密钥存在于给定的分区中,以便更快地访问?
我理解分区计数是可配置的,但在修改任何配置之前我想知道一些内部。
答案 0 :(得分:1)
这样,employeeObj和具有相同empKey的family对象都将存储在同一个分区中。
正确。
我想知道在这一步之后会发生什么。我知道密钥存储为com.hazelcast.nio.serialization.Data类(二进制形式)。是否会为每个散列映射维护单独的散列桶,其密钥存在于给定的分区中,以便更快地访问?
每个IMap都获得完全私有的内部存储(它将获得自己的ConcurrentHashMap实例作为支持结构)。所以你将有单独的hashbucket。