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

Hazelcast : Difference in data distribution across partition in IMap and ISemaphore

我的疑惑来自linkhttps://hazelcast.org/mastering-hazelcast/#controlled-partitioning

它说:

Hazelcast has two types of distributed objects.

One type is the truly partitioned data structure, like the IMap, where each partition will store a section of the Map.

The other type is a non-partitioned data structure, like the IAtomicLong or the ISemaphore, where only a single partition is responsible for storing the main instance.

比方说,我在IMap中放了500条记录,我的理解是,每条记录可能在不同的分区。 现在我已经在 ISemaphore 中放置了 500 条记录,那么从上面引用的 link 段落是否意味着所有 500 条记录都将进入单个分区? 请帮助我理解 IAtomicLong 或 ISemaphore,其中只有一个分区负责存储主实例。

还想了解,在 hazelcast 中跨分区的数据分布方面,Semaphore 和 IMap 有何不同?

对于 IMap,对数据结构进行分区是有意义的,因为它通常会包含很多项目(在您的示例中为 500 个),并且经常需要并发访问地图中任何位置的项目。

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

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