«
ZK的数据模型
时间:2023-11-4 13:22 作者:野马 分类: 无
ZK的数据模型是一种树形结构,具有一个固定的根节点(/),可以在根节点下创建子节点,并在子节点下继续创建下一级节点。
每一层级用/隔开,且只能用绝对路径(get/work/task1)的方式查询ZK节点,而不能用相对路径。
持久节点
- 将节点创建为持久节点,该数据节点会一直存储在ZK服务器上,即使创建该节点的客户端与服务端的会话关闭了,该节点依然不会被删除,除非显式调用delete函数进行删除操作。
临时节点
- 如果将节点创建为临时节点,那么该节点数据不会一直存储在ZK服务器上。当创建该临时节点的客户端会话因超时或发生异常而关闭时,该节点也相应在ZK服务器上被删除。也可以主动调用delete删除。
有序节点
- 有序节点并不算一种单独种类的节点,而是在持久节点和临时节点的基础上,增加一个节点有序的性质。创建有序节点的时候,ZK服务器会自动使用一个单调递增的数字作为后缀,追加到创建的节点后边。例如一个客户端创建了一个路径为works/task-的有序节点,那么ZooKeeper将会生成一个序号并追加到该节点的路径后,最后该节点的路径为works/task-1。
节点内容
一个二进制数组(byte data[]),用来存储节点的数据、ACL访问控制、子节点数据(因为 临时节点不允许有子节点,所以其子节点字段为null),记录自身状态信息的stat。
stat +节点路径可以查看状态信息 czxid:创建节点的事务id mzxid:最后一次被更新的事务id pzxid:子节点最后一次被修改的事务id ctime:创建时间 mtime:最后更新时间 version:版本号、表示的是对节点数据内容,子节点信息或ACL信息的修改次数可以避免并发更新问题,使用之前获取的版本进行CAS操作更新 cversion:子节点版本号 aversion:acl的版本号 ephemeralOwner:创建节点的sessionId,如果是持久节点、值为0 dataLenght:数据内容长度 numChildren:子节点个数