[Hazelcast系列 三]分布式数据结构简介
Hazelcast提供了很多通用数据结构的分布式实现。针对每一种不同的客户端语言,Hazelcast都尽量模拟该语言原生接口,对于Java客户端,Hazelcast提供的IMap
和java.util.Map
有近似的语义。为了更加直观的描述,针对Hazelcast中的数据结构,我们将提供Java中等效或类似接口。 所有这些结构都可以在Java,.NET,C ++,Node.js,Python,Go和Scala客户端中使用。
-
标准集合
- Map:
java.util.Map
的分布式实现。 - Queue:
java.util.concurrent.BlockingQueue
的分布式实现。 - Ringbuffer:Java中没有对应的数据结构,Ringbuffer通常用于可靠的事件系统。
- Set:
java.util.Set
的分布式并发实现。 - List:
java.util.List
的分布式并发实现,支持存储重复元素,这是和Set
的区别。 - Multimap:
com.google.common.collect.Multimap
的分布式实现,支持存储重复键。 - Replicated Map:不支持分区的
Map
数据结构,集群所有成员都有全量数据。 - Cardinality Estimator :实现了lajolet’s HyperLogLog 算法的数据结构。
- Map:
-
主题
主题是用于多个订阅者的分布式消息分发机制,和kakfa、pulsar中的主题一样,同样也是pub/sub消息模型的关键。Hazelcast支持通过主题进行消息的可靠分发。
-
并发工具
- FencedLock:java 中
java.util.concurrent.locks.Lock
的分布式实现,可以保证集群中只有一个线程可以获得锁。 - ISemaphore:java中
java.util.concurrent.Semaphore
的分布式实现。 - IAtomicLong :java中
java.util.concurrent.atomic.AtomicLong
的分布式实现。 - IAtomicReference:Java中
java.util.concurrent.atomic.AtomicReference
的分布式实现。 - FlakeIdGenerator:用于生产集群范围内的标识符。
- ICountdownLatch: Java中
java.util.concurrent.CountDownLatch
的分布式实现。 - PN counter:一个分布式数据结构,其中每个Hazelcast实例都可以递增和递减计数器值,并将这些更新传播到所有副本。
- FencedLock:java 中
Event Journal:是一种分布式数据结构,用于存储map或缓存上操作的历史记录。
1. 分布式对象简介
基于分区策略,Hazelcast有两种类型的分布式数据结构:分区数据结构和非分区数据结构,分区数据结构一个分区只保存部分数据,非分区数据结构一个分区保存全部的数据。
Hazelcast中的分区数据结构包括以下四种:
- Map
- MultiMap
- Cache
- Event Journal
以下为非分区数据结构:
- Queue
- Set
- List
- Ringbuffer
- FencedLock
- ISemaphore
- IAtomicLong
- IAtomicReference
- FlakeldGenerator
- ICountdownLatch
- Cardinality Estimator
- PN Counter
除分区和非分区数据结构以外,Hazelcast同时提供了Replicated Map(可复制集合)数据结构。
2 . 分布式对象的加载和销毁
针对大多数分布式对象,Hazelcast提供了获取实例的get
方法。一个分布式对象的加载,首先需要创建一个Hazelcast实例,然后通过Hazelcast实例调用对应的get
方法获取。下面的例子创建一个Hazelcast实例instance1
并在该实例上创建一个叫data
的分布式Map
。
HazelcastInstance instance1 = Hazelcast.newHazelcastInstance();
IMap<String, String> data = instance1.getMap("data");
相关文章