ZooKeeper 第3章数据模型/znode节点深入

第3章 数据模型/znode节点深入

1. Znode的数据模型

  1.1  是什么

Znode维护了一个stat结构,这个stat包含数据变化的版本号、访问控制列表变化、还有时间戳。版本号和时间戳一起,可让ZooKeeper验证缓存和协调更新。每次znode的数据发生了变化,版本号就增加。

 

例如,无论何时客户端检索数据,它也一起检索数据的版本号。并且当客户端执行更新或删除时,客户端必须提供他正在改变的znode的版本号。如果它提供的版本号和真实的数据版本号不一致,更新将会失败。

  1.2  Stat结构体

czxid- 引起这个znode创建的zxid,创建节点的事务的zxid(ZooKeeper Transaction Id)

ctime - znode被创建的毫秒数(从1970年开始)

mzxid - znode最后更新的zxid

mtime - znode最后修改的毫秒数(从1970年开始)

pZxid-znode最后更新的子节点zxid

cversion - znode子节点变化号,znode子节点修改次数

dataversion - znode数据变化号

aclVersion - znode访问控制列表的变化号

ephemeralOwner- 如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。

dataLength- znode的数据长度

numChildren - znode子节点数量

  1.3  总结

ZooKeeper内部维护了一套类似UNIX的树形数据结构:由Znode构成的集合,

Znode的集合又是一个树形结构,每一个Znode又有很多属性进行描述。  

Znode = path + data + Stat

2. Znode中的存在类型

Znode是由客户端创建的,它和创建它的客户端的内在联系,决定了它的存在性:

 

PERSISTENT-持久化节点:

创建这个节点的客户端在与zookeeper服务的连接断开后,这个节点也不会被删除(除非您使用API强制删除)。

 

PERSISTENT_SEQUENTIAL-持久化顺序编号节点:

当客户端请求创建这个节点A后,zookeeper会根据parent-znode的zxid状态,为这个A节点编写一个全目录唯一的编号(这个编号只会一直增长)。当客户端与zookeeper服务的连接断开后,这个节点也不会被删除。

EPHEMERAL-临时目录节点:

创建这个节点的客户端在与zookeeper服务的连接断开后,这个节点(还有涉及到的子节点)就会被删除。

 

EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点:

当客户端请求创建这个节点A后,zookeeper会根据parent-znode的zxid状态,为这个A节点编写一个全目录唯一的编号(这个编号只会一直增长)。当创建这个节点的客户端与zookeeper服务的连接断开后,这个节点被删除。

 

另外,无论是EPHEMERAL还是EPHEMERAL_SEQUENTIAL节点类型,在zookeeper的client异常终止后,节点也会被删除