
[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的树形结构存储方式。
发表评论
最新留言
感谢大佬
[***.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版最新关于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