Hazelcast:IMap和ISemaphore中跨分区的数据分布差异

时间:2019-04-20 12:48:20

标签: hazelcast hazelcast-imap data-partitioning

我的疑问来自链接https://hazelcast.org/mastering-hazelcast/#controlled-partitioning

它说:

  

Hazelcast有两种类型的分布式对象。

     

一种类型是真正分区的数据结构,例如IMap,其中   每个分区将存储地图的一部分。

     

另一种类型是未分区的数据结构,例如   IAtomicLong或ISemaphore,其中只有一个分区是   负责存储主实例

比方说,我在IMap中放置了500条记录,据我了解,每条记录可能位于不同的分区中。 现在,我将500条记录放入ISemaphore中,然后从链接上方引用的段落开始,这意味着所有500条记录都将放在单个分区中? 请帮助我了解 IAtomicLong或ISemaphore,其中只有一个分区负责存储主实例。

还想了解,信号量和IMap在榛子广播中跨分区的数据分配方面有何不同?

1 个答案:

答案 0 :(得分:0)

使用IMap,对数据结构进行分区很有意义,因为它通常会容纳很多项目(在您的示例中为500),并且经常需要同时访问地图中任何位置的项目。

但是像ISemaphore和IAtomicLong这样的数据结构是简单的对象,而不是对象的集合-您不能将500条记录添加到ISemaphore。信号量状态仅包含几个字段(计数,当前所有者,名称,也许还有其他几个字段),将它们分开并将它们存储在单独的分区中是没有意义的。

队列更有趣,因为它确实包含多个项目,但不是分区的数据结构。您可以将500个项目添加到队列中,但是访问总是在队列的前面(用于读取)或在队列的后面(用于写入),因此在分区之间分布数据结构并不能真正提高并发性就像对Map,Set,List和类似集合的随机访问一样。