系列文章
Hazelcast系列(一):初识hazelcast
Hazelcast系列(二):hazelcast集成(嵌入式)
Hazelcast系列(三):hazelcast集成(服务器/客户端)
Hazelcast系列(四):hazelcast管理中心
Hazelcast系列(五):Auto-Detection发现机制
Hazelcast系列(六):Multicast发现机制
Hazelcast系列(七):TCP-IP发现机制
Hazelcast系列(八):数据结构
目录
前言
概览
分区
CAP
参考
总结
前言
前面已经对 Hazelcast 集成与各种发现机制进行了探讨,接下来,让我们来一起了解一下数据结构的特点与使用。
当前 hazelcast 版本:5.1.7
概览
数据结构 | 描述 | 是否分区 | CAP |
---|---|---|---|
Map | 跨集群分区的键值对。地图提供了广泛的功能,例如 SQL 查询、WAN 复制和近缓存 | 是 | AP |
Topic | 用于发布传递给多个订阅者的消息的分布式机制,也称为发布/订阅 (pub/sub) 消息传递模型 | 否 | AP |
Replicated Map | 在集群中的每个成员之间复制的键值对 | 否 | AP |
Queue | 一种用于在一个成员/客户中添加项目并将其从另一个成员/客户中删除的数据结构 | 否 | AP |
Cache | 符合规范的 JCache 实现 | 是 | AP |
Ringbuffer | 用于构建可靠的事件系统 | 否 | AP |
Set | 分布式并发集合,不包含重复元素且不保留其顺序 | 否 | AP |
List | 与 Set 类似,不同之处在于列表允许重复元素并保留其顺序 | 否 | AP |
Multimap | 它是一种分布式数据结构,您可以在其中存储单个键的多个值 | 是 | AP |
Reliable Topic | 与 Topic 类似,不同之处在于可靠主题由 Ringbuffer 数据结构备份 | 否 | AP |
Cardinality Estimator | 实现 Flajolet 的 HyperLogLog 算法的数据结构 | 否 | AP |
Fenced Lock | 提供对共享资源的独占访问的锁;一次只有一个线程可以获取锁,并且所有对共享资源的访问都需要首先获取锁 | 否 | CP |
Semaphore | 一种数据结构,用于创建在执行并发活动时控制线程计数的许可 | 否 | CP |
Atomic Long | long 用于处理可在分布式环境中原子更新的值的数据结构 | 否 | CP |
Atomic Reference | 用于处理分布式环境中的引用的数据结构 | 否 | CP |
Countdown Latch | 用于并发活动的分布式栅栏;它使线程能够等待其他线程完成其操作 | 否 | CP |
Flake ID Generator | 用于生成集群范围内唯一标识符的数据结构 | 否 | AP |
PN Counter | 每个 Hazelcast 实例都可以递增和递减计数器值,并且这些更新会传播到所有副本 | 否 | AP |
Event Journal | 用于存储映射或缓存数据结构上的突变操作的历史记录 | 是 | AP |
分区
-
说明
-
分区:每个分区存储整个数据结构的一部分。
-
非分区:单个分区存储整个数据结构
-
-
控制分区
默认情况下,队列具有不同的名称,因此它们将被放置到不同的分区中:
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
IQueue q1 = hazelcastInstance.getQueue("q1");
IQueue q2 = hazelcastInstance.getQueue("q2");
如果要将这两个放入同一分区,请使用以下 @ 符号:
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
IQueue q1 = hazelcastInstance.getQueue("q1@foo");
IQueue q2 = hazelcastInstance.getQueue("q2@foo");
现在,这两个队列将被放入分区键为 的同一分区中 foo 。
CAP
- AP
AP 数据结构更喜欢可用性而不是一致性。发生分区时,所有成员仍然可用,但某些成员可能返回比其他成员更旧的数据版本。解决分区后,成员通常会重新同步以修复任何不一致的情况:
1.如果某个成员出现故障,其备份副本(保存相同的数据)会动态地将数据(包括数据的所有权和锁定)重新分配给剩余的活动成员。因此,不会有任何数据丢失。
2.没有一个集群主节点可能会出现单点故障。集群中的每个成员都享有平等的权利和义务。没有任何一个成员是优越的
- CP
CP 数据结构以牺牲可用性为代价来提供一致性和分区容错性。当任意两个 CP 成员之间发生分区时,必须关闭不一致的 CP 成员,直到分区得到解决。
CP数据结构与AP数据结构有两个不同之处:
-
METADATA
-
destroy()
参考
- Distributed Data Structures
总结
不同的数据结构能在不同的业务中实现奇效,了解其特点,在 Hazelcast 的分布式环境中,选取数据结构最优解是非常有必要的。