为了账号安全,请及时绑定邮箱和手机立即绑定

ZooKeeper 数据模型 znode 结构详解

标签:
Java

数据模型

在 zookeeper 中,可以说 zookeeper 中的所有存储的数据是由 znode 组成的,节点也称为 znode,并以 key/value 形式存储数据。

整体结构类似于 linux 文件系统的模式以树形结构存储。其中根路径以 / 开头。

进入 zookeeper 安装的 bin 目录,通过sh zkCli.sh打开命令行终端,执行 "ls /" 命令显示:

$ ls /$ ls /zookeeper
$ ls /zookeeper/quota

https://img1.sycdn.imooc.com//609540e20001fd0803870125.jpg

我们直观的看到此时存储的数据在根目录下存在 runoob 和 zookeeper 两个节点,zookeeper 节点下存在 quota 这个节点。

https://img1.sycdn.imooc.com//609540e20001ca8d06050415.jpg

runoob 节点是在我们之前章节创建,并且通过 java 客户端设置值 0,现在我们在命令行终端执行 get /runoob 显示此节点的属性。

$ get /runoob

https://img1.sycdn.imooc.com//609540e20001f57303310195.jpg

其中第一行显示的 0 是该节点的 value 值。

Znode 的状态属性

cZxid创建节点时的事务ID
ctime创建节点时的时间
mZxid最后修改节点时的事务ID
mtime最后修改节点时的时间
pZxid表示该节点的子节点列表最后一次修改的事务ID,添加子节点或删除子节点就会影响子节点列表,但是修改子节点的数据内容则不影响该ID(注意,只有子节点列表变更了才会变更pzxid,子节点内容变更不会影响pzxid)
cversion子节点版本号,子节点每次修改版本号加1
dataversion数据版本号,数据每次修改该版本号加1
aclversion权限版本号,权限每次修改该版本号加1
ephemeralOwner创建该临时节点的会话的sessionID。(**如果该节点是持久节点,那么这个属性值为0)**
dataLength该节点的数据长度
numChildren该节点拥有子节点的数量(只统计直接子节点的数量)

了解上面状态属性值,我们对 /runoob 节点做一次修改,执行命令 set /runoob 1 ,如下图所示:

$ set /runoob 1

https://img1.sycdn.imooc.com//609540e20001e8c903490184.jpg

对比上面结果,可以看到 mZxid、mtime、dataVersion 都发生了变化。

在 /runoob 节点下,我们再添加一子节点,执行:

$ create -e  /runoob/child  0$ get /runoob

提示:更多命令使用后面章节会详解介绍。

执行完终端命令行显示:

https://img1.sycdn.imooc.com//609540e300017b7e04400229.jpg

可见 /runoob 节点的 pZxid、cversion、numChildren 都发生了相应的改变。

作者公众号:一起写程序

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消