HazelCast map.get()去哪了?和可伸缩性问题

时间:2016-11-26 01:53:09

标签: scalability hazelcast

根据this,“每个map.get(k)将是一个远程操作”但遥控器在哪里?例如,我有一个节点用key -k写入IMap。另外50个节点使用map.get(k)从IMap读取。当50个节点调用map.get(k)时会发生什么。每次调用是否都来自执行写操作的节点?如果是这样,这个“远程”节点将在响应这50个呼叫时创建多少个IMap副本?它是多线程的吗?这是IMap单身人士吗?或者每个线程都会创建这样的IMap的深层副本?

1 个答案:

答案 0 :(得分:5)

  

但遥控器在哪里?

答案在您提供的文档链接的前一句中:“想象一下,您正在多次读取密钥k,并且k由集群中的另一个成员拥有。”每个密钥都经过哈希处理并映射到一个分区,如http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html#sharding-in-hazelcast和后面的“数据分区”部分所述。拥有该分区的集群成员是密钥的所有者(或主副本)。每次阅读和阅读写入该密钥将由该特定成员上的同一线程执行(除非您的配置允许从备份读取)。

  

当50个节点调用map.get(k)时会发生什么。每个调用是否都来自执行写入的节点?

是的,它始终是对该密钥执行操作的密钥所有者。

  

若然,这个“远程”节点会在响应这50个电话时创建多少份IMAP?

该成员只有一个IMap实例,没有副本。

  

是多线程的吗?

不,涉及相同密钥k的所有映射操作都将在同一成员的同一分区线程上执行,该成员是该密钥的主要副本。您可以在http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html#operation-threading

中阅读有关操作模型的更多信息