zookeeper学习(三)基础数据结构

数据模型

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

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

进入 zookeeper 安装的 bin 目录,通过sh zkCli.sh打开命令行终端

./zkCli.sh -server localhost:2181

执行 “ls /” 命令显示:

ls /

在这里插入图片描述

在默认情况下 根目录 / 下只有zookeeper一个节点,我们也可以手动的加节点

![在这里插入图片描述](https://img-blog.csdnimg.cn/b9f3058db20b4a9fbfe94d81e55f1bf2.png
可以通过get命令来查看节点的值

get /test

zookeeper学习(三)基础数据结构_第1张图片

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

Znode的组成部分

Znode 的data(数据)

get /test

zookeeper学习(三)基础数据结构_第2张图片

Znode的acl(权限)

getAcl /路径
getAcl /test

在这里插入图片描述

Znode的stat(元数据)

stat /节点路径
stat /test

zookeeper学习(三)基础数据结构_第3张图片

  • cZxid 创建节点时的事务ID
  • ctime 创建节点时的时间
  • mZxid 最后修改节点时的事务ID
  • mtime 最后修改节点时的时间
  • pZxid 表示该节点的子节点列表最后一次修改的事务ID,添加子节点或删除子节点就会影响子节点列表,但是修改子节点的数据内容则不影响该ID(注意,只有子节点列表变更了才会变更pzxid,子节点内容变更不会影响pzxid)
  • cversion 子节点版本号,子节点每次修改版本号加1
  • dataversion 数据版本号,数据每次修改该版本号加1
  • aclversion 权限版本号,权限每次修改该版本号加1
  • ephemeralOwner 创建该临时节点的会话的sessionID。(如果该节点是持久节点,那么这个属性值为0)
  • dataLength 该节点的数据长度
  • numChildren 该节点拥有子节点的数量(只统计直接子节点的数量)
    了解上面状态属性值,我们对 /test 节点做一次修改,执行命令 set /test ccc ,如下图所示:
$ set /test ccc

对比上面结果,可以看到 mZxid、mtime、dataVersion 都发生了变化。
zookeeper学习(三)基础数据结构_第4张图片

Zonde的child(子节点)

ls /节点路径
ls /test     获取test节点的子节点

在这里插入图片描述

Znode节点类型

在3.6.2版本中

  • PERSISTENT:持久化节点,在会话结束后依然存在,不会随客户端的断开而自动删除,默认类型

  • PERSISTENT_SEQUENTIAL:持久序号节点,创建出的节点,根据创建先后顺序,会在节点后带一个数值,znode的名字将被附加一个单调递增的数字,越往后数值越大,适用于分布式锁的应用场景

  • EPHEMERAL:临时节点,当客户端断开时自动删除,通过这个特性,zk可以实现服务注册与发现的效果

  • EPHEMERAL_SEQUENTIAL:带序号的临时节点,znode的名字将被附加一个单调递增的数字
    zookeeper学习(三)基础数据结构_第5张图片

  • CONTAINER(3.5.3版本新增):Container容器节点,当容器中没有任何子节点,该容器节点会被zk定期删除(60s)

  • PERSISTENT_WITH_TTL:zookeeper的扩展类型,如果znode在给定的TTL内没有被修改,它将在没有子节点时被删除。要想使用该类型,必须在zookeeper的bin/zkService.sh中的启动zookeeper的java环境中设置环境变量zookeeper.extendedTypesEnabled=true(具体做法在下边),否则KeeperErrorCode = Unimplemented for /**。

  • PERSISTENT_SEQUENTIAL_WITH_TTL:同上,是不过是带序号的

你可能感兴趣的:(zookeeper,学习,linux)