ZooKeeper数据模型ZNode

ZNode简介

在zookeeper中,数据信息被保存在一个个数据节点上,这些节点被称为ZNode,ZNode是zookeeper中最小数据单位,在ZNode下面又可以再挂ZNode,这样一层层下去就形成一个层次化命名空间ZNode树,我们称之为ZNode Tree,它采用了类似文件系统的层级树状结构进行管理,如下图
ZooKeeper数据模型ZNode_第1张图片
在zookeeper中,每一个数据节点都是一个ZNode,上图根目录下有两个节点,分别是app1和app2,其中app1 下面又有三个子节点,所有ZNode按层次化进行组织,形成这么一棵树,ZNode的节点路径标识方式和Unix文件系统路径非常相似,都是由一系列使用斜杠(/)进行分割的路径表示,开发人员可以向这个节点写入数据,也可以在这个节点下面创建子节点。

ZNode类型

zookeeper节点类型可以分为三大类

  • 持久性节点(Persistent)
  • 临时性节点(Ephemeral)
  • 顺序性节点(Sequential)

在开发中创建节点的时候通过组合可以生成以下四种节点类型:持久节点、持久顺序节点、临时节点、临时顺序节点。不同类型的节点会有不同的生命周期。

  • 持久节点:是zookeeper中最常见的一种节点类型,所谓持久节点,就是指节点被创建以后会一直存在于服务器,知道删除操作主动清除
  • 持久顺序节点:就是有顺序的持久节点,节点特性和持久节点一样,只是额外特性表现在顺序上。顺序特性实质是在创建节点的时候,会在节点名后面加上一个数字后缀,来表示其顺序
  • 临时节点:就是会被自动清理掉的节点,它的生命周期和客户端会话绑在一起,客户端会话结束,节点就会被删除掉,与持久性节点不同的是,临时节点不能创建子节点。
  • 临时顺序节点:就是有顺序的临时节点,和持久顺序节点相同,在其创建的时候会在名字后面加上数字后缀。

事务ID

首先,事务是对物理和抽象的应用状态上的操作集合。往往在现在的概念中,狭义上的事务通常指的是数据库事务,一般包含了一系列对数据库有序的读写操作,这些数据库事务具有所谓的ACID特性,即原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
而在zookeeper中,事务是指能够改变zookeeper服务器状态的操作,我们也称之为事务操作或者更新操作,一般包括数据节点创建和删除、数据节点内容更新等操作。对于每一个事务请求,zookeeper都会为其分配一个全局唯一的事务ID,用ZXID来表示,通常是一个64位的数据,每一个ZXID对应一次更新操作,从这些ZXID中可以间接的识别出zookeeper处理这些更新操作请求的全局顺序

ZNode 状态信息

ZooKeeper数据模型ZNode_第2张图片
整个ZNode节点内容包括两部分:节点数据内容和节点状态信息,图中quota是数据内容,其他的属于状态信息,他们的含义如下

 cZxid 就是 Create ZXID,表示节点被创建时的事务ID。
ctime 就是 Create Time,表示节点创建时间。
mZxid 就是 Modified ZXID,表示节点最后一次被修改时的事务ID。
mtime 就是 Modified Time,表示节点最后一次被修改的时间。
pZxid 表示该节点的子节点列表最后一次被修改时的事务 ID。只有子节点列表变更才会更新 pZxid,
子节点内容变更不会更新。
cversion 表示子节点的版本号。
dataVersion 表示内容版本号。
aclVersion 标识acl版本
ephemeralOwner 表示创建该临时节点时的会话 sessionID,如果是持久性节点那么值为 0 dataLength 表示数据⻓度。
numChildren 表示直系子节点数。子节点的子节点不算

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