zookeeper——节点操作

概述

zookeeper的数据节点可以视为是树状结构,树中的各个节点被称之为znode,一个znode可以拥有多个节点,使用节点的路径来定位某个znode。

znode兼具文件和目录两种身份,既能像文件一样维护着数据、元信息、ACL、时间戳等数据,又可以像目录已经作为路径的标识的一部分。

znode的组成部分

  • 节点的数据:节点path,以及对应的节点数据。
  • 节点的子节点children
  • 节点的状态state:用来描述当前节点的创建、修改记录、包括cZxid、ctime等
    • cZxid:数据节点创建时的事务id
    • ctime:数据节点创建时的时间
    • mZxid:数据节点最后一次更新时的事务id
    • mtime:数据节点最后一次更新时的时间
    • pZxid:数据节点的子节点最后一次修改时的事务id
    • cversion:子节点的更改次数
    • dataVersion:当前节点数据修改次数
    • aclVersion:节点的ACL修改次数(当前节点对应的权限列表修改次数)
    • ephemeralOwner:如果当前节点是临时节点,则表示创建该节点会话的SessionID,如果当前节点是持久节点,则该属性为0。
    • dataLength:数据内容的长度(字节为单位)
    • numChildren:数据节点当前的子节点个数

节点类型

zookeeper有两种节点类型,节点类型在创建的时候即被确定,并且不能修改

  • 临时节点(Znode):该节点的生命周期依赖于创建他们的会话,一旦session结束,临时节点将会被清除,虽然每个Znode都会绑定到一个客户端session,但他们对所有客户端还是可见的,需要注意的是临时节点不允许有自己的子节点
  • 持久化节点:此类型的节点声明周期不依赖于会话,并且有在客户端显示的执行删除操作的时候,他们才能被清除

数据操作

新增节点

create [-s] [-e] [-c] [-t ttl] path [data] [acl]

两个重要的参数 -s 和 -e。

  • -s:有序节点
  • -e:临时节点

所以zookeeper的节点分为,有序的持久化节点、无序的持久化节点、有序的临时节点、无序的临时节点。

创建一般节点(无序、持久节点)

创建有序节点

有序节点会在节点名称后面追加一个序号

更新节点

set [-s] [-v version] path data

修改节点的值

每次修改数据之后,当前节点的数据版本号dataVersion会自增1

修改节点的值的时候,可以带上版本号,只有版本号与当前节点的数据版本号一致的时候才能修改成功。相当于乐观锁的机制,在多线程操作数据的情况下可以防止出现ABA问题。

删除节点

delete [-v version] path

可以加上版本号进行删除。

当删除的节点下存在子节点的时候,删除当前节点将会失败。需要使用deleteall删除,3.7版本之前是rmr命令

查看节点信息

get [-s] [-w] path
  • -s:现实节点的详细信息
  • -w:添加监听器,在当前节点发生变化后,会向当前会话对应的客户端发出通知。
stat [-w] path

stat只返回节点的信息,不返回节点的数据

节点信息的改变:

  • cZxid:数据节点创建时的事务id
  • ctime:数据节点创建时的时间
  • mZxid:数据节点最后一次更新时的事务id
    • 没有改变之前(初始值)和cZxid一致,在节点发生过任何一次修改之后将会改变
  • mtime:数据节点最后一次更新时的时间
    • 没有改变之前(初始值)和ctime一致,在节点发生过任何一次修改之后将会改变
  • pZxid:数据节点的子节点最后一次修改时的事务id
    • 每一次当前节点的子节点时发生改变(创建或者修改),与最新创建或者修改时子节点的pZxid一致
  • cversion:子节点的更改次数
  • dataVersion:当前节点数据修改次数
  • aclVersion:节点的ACL修改次数(当前节点对应的权限列表修改次数)
  • ephemeralOwner:如果当前节点是临时节点,则表示创建该节点会话的SessionID,如果当前节点是持久节点,则该属性为0。
  • dataLength:数据内容的长度(字节为单位)
  • numChildren:数据节点当前的子节点个数

查看节点列表

ls [-s] [-w] [-R] path

使用如下:

查询某个节点下的子节点,但是不会返回孙子节点

-s参数返回子节点的信息(旧版本使用ls2命令):

-R参数返回当前节点以及其下所有节点的列表,包括当前节点本身

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值