[Zookeeper版本3.6.2源码系列]-5-Zookeeper的树形节点的基础数据模型
发布日期:2025-04-03 23:33:32 浏览次数:205 分类:精选文章

本文共 2599 字,大约阅读时间需要 8 分钟。

5-Zookeeper的基础数据模型

5.1 Zookeeper节点存储

在Zookeeper中,基础数据使用树形结构存储,对应源码中的类型为DataTree。树中的节点在这里称为znode,对应源码中的DataNode。DataNode节点主要用于存储节点的数据,包含ACL访问控制、统计数据和子节点列表等信息,同时实现了Record接口来支持序列化和反序列化。

5.1.1 DataNode类型

DataNode类型主要存储节点的数据,包含ACL访问控、统计数据和子节点列表等。它还实现了Record接口,用于序列化和反序列化。DataNode节点的设计如下:

成员变量 类型 说明
digest long 根据其他成员变量使用DigestCalculator类型calculateDigest方法计算的摘要信息,用于检测数据是否被篡改。
digestCached boolean 标记此节点的摘要是否是最新的,用于优化性能。如果为true,则摘要已缓存,若为false则在节点变更时会重新计算。
data byte[] 数据节点的数据内容。
acl Long 此datanode的ACL映射长度。
stat StatPersisted 存储节点的持久化统计数据。
children Set 此节点的子节点名字列表,不包含父级目录。
EMPTY_SET Set 空集合,表示子节点为空。
5.1.2 StatPersisted

每个DataNode节点都会有一个StatPersisted类型的对象,用于记录节点的持久化统计数据。StatPersisted包含以下成员变量:

成员变量 类型 说明
czxid long 数据节点被创建时的事务ID。
mzxid long 数据节点被修改时的最新事务ID。
ctime long 数据节点创建时间。
mtime long 数据节点最后修改时间。
version int 当前节点版本号(修改次数+1)。
cversion int 子节点版本号(子节点修改次数+1)。
aversion int 当前节点ACL版本号(ACL修改次数+1)。
ephemeralOwner long 临时节点标示,存储sessionId(会话ID),如果是临时节点则存储会话ID,否则值为空。
pzxid long 父级节点的事务ID。

此外,StatPersisted还包含以下额外字段:

成员变量 类型 说明
dataLength int 数据节点的数据长度。
numChildren int 数据节点的子节点个数。
5.1.3 DataTree

DataTree主要用于维护节点的树形结构。其成员变量设计如下:

成员变量 类型 说明
LOG Logger slf4j标准化日志组件。
RATE_LOGGER RateLogger 限流打印日志。
nodes NodeHashMap 存储路径和DataNode的映射,提供快速查找功能。
dataWatches IWatchManager 数据监听管理器。
childWatches IWatchManager 子节点监听管理器。
nodeDataSize AtomicLong 缓存的所有数据节点路径和数据的总大小。
rootZookeeper String Zookeeper树的根,值为/
procZookeeper String 管理和状态节点的Zookeeper节点,值为/zookeeper
procChildZookeeper String root的子级存储字符串,值为zookeeper
quotaZookeeper String 配额管理节点,值为/zookeeper/quota
quotaChildZookeeper String 值为zookeeper
configZookeeper String 配置节点,值为/zookeeper/config
configChildZookeeper String 值为zookeeper
pTrie PathTrie 根据路径实现的前缀树,可用于查询匹配节点路径。
STAT_OVERHEAD_BYTES int znode的stat字段大小,值为(6 * 8) + (5 * 4)
ephemerals Map<Long, HashSet> sessionId与临时节点的映射关系。
containers Set 容器节点类型的集合。
ttls Set ttl节点类型的集合。
aclCache ReferenceCountedACLCache ACL缓存信息存储。
DIGEST_LOG_LIMIT int 最大授权日志保留数量,值为1024。
DIGEST_LOG_INTERVAL int 对齐间隔,值为128,十六进制为80。
digestFromLoadedSnapshot ZxidDigest 需要验证的摘要信息,若不为null则寻找目标zxid。
lastProcessedZxidDigest ZxidDigest 与数据树中最高zxid相关联的摘要。
firstMismatchTxn boolean 标记变量,若为true则打印摘要日志。
digestWatchers List 摘要不匹配时通知订阅者。
digestLog LinkedList 历史摘要列表。
digestCalculator DigestCalculator 节点摘要计算器。
5.1.4 NodeHashMap

NodeHashMap接口通过NodeHashMapImpl实现,用于存储路径与节点的映射关系。其主要成员变量如下:

成员变量 类型 说明
nodes ConcurrentHashMap<String, DataNode> 路径节点映射。
digestEnabled boolean 是否启用摘要功能。
digestCalculator DigestCalculator 摘要计算工具类。
hash AdHash 用于跟踪数据树的散列,用于快速验证事务是否同步。
hash AdHash 该增量散列通过每次新增节点的摘要值相加得到最后的hash值。

通过上述结构,我们可以深入了解Zookeeper的树形结构存储方式。

上一篇:KVM虚拟化网络优化技术总结
下一篇:KVM虚拟化技术实战

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月21日 06时56分08秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

2024最新最全CTF入门指南(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
2024最新科普什么是大模型?零基础入门到精通,收藏这篇就够了 2025-03-29
2024最新程序员接活儿搞钱平台盘点 2025-03-29
2024最火专业解读:信息安全(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
2025最新大模型技术学习过程梳理,零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新0基础怎么转行网络安全?零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新Bash Shell入门指南,零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新C++快速入门(适合小白)零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新一文彻底搞懂大模型 - Agent(非常详细)零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新关于HW护网行动的一些知识,零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新大模型学习路线,零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新大模型开发流程(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-30
2025版最新大模型微调方法(非常详细)零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新大语言模型的指令微调,零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新小白学习大模型:什么是大模型?零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新常用黑客工具之【Nmap 教程基础】零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新渗透测试和黑客工具列表,零基础入门到精通,收藏这一篇就够了 2025-03-30
2025版最新网络安全等级保护测评指南,零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新运维怎么转行网络安全?零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新黑客学习网站(非常详细),零基础入门到精通,看这一篇就够了 2025-03-30