shangban 发表于 2015-9-6 13:14:56

Zookeeper(六)数据模型

  Zookeeper数据模型:
  Zookeeper的结构类似标准的文件系统,但这个文件系统中没有文件和目录,而是统一使用节点(node)的概念,称为znode。Znode作为保存数据的容器(限制在1mb以内),也构成了一个层次化的命名空间。
  

  znode
  zookeeper目录中的每一个节点对应着一个znode,每个znode维护着一个属性结构,它包含数据的版本号、时间戳、等信息。Zookeeper就是通过这些属性来实现它特定的功能。每当znode的数据改变时,相应的版本号会增加,每当客户端查询、更新和删除数据时,也必须提供要被操作的znode版本号,如果所提供的数据版本号与实际的不匹配,那么将会操作失败。
  节点属性:
  属性
  描述
  czxid
  节点被创建的zxid值
  mzxid
  节点被修改时zxid值
  ctime
  节点创建的时间
  mtime
  节点最后一次的修改时间
  vesion
  节点的版本号
  cversion
  节点所拥有的子节点被修改的版本号
  aversion
  节点的ACL被修改的版本号
  dataLength
  节点数据的长度
  numChildren
  节点拥有子节点的个数
  ephemeralOwner
  如果节点为临时节点,那么它的值为这个节点拥有者的session ID;负责它的值为0
  Znode是客户端访问的zookeeper的主要实体,它包含了以下主要特征:
  (1)Watch
  Znode状态发生改变时(增删改等操作),watch (监视器)机制可以让客户端得到通知,并且仅仅只会触发一次watch。
  在读操作exists、getChildren和getData上可以设置监视器,这些监视器可以被写操作create、delete和setData触发。ACL相关的操作不参与任何监视器。当一监视器触发时,会产生一个事件,这个监视器和触发它的操作共同绝地沟了监视器事件类型。
  *当所监视的znode被创建子节点、删除或其他数据更新时,设置在exists操作上的监视器将会被触发。
  *当所监视的znode被删除或其更新时,设置在getData上的监视器将会被触发,创建znode不会触发getData上的监视器,因为getData操作成功执行的前提是znode必须已经在。
  *当所监视的znode的一个子节点被创建或删除时,或监视的znode自己被删时,设置在getChildren操作上的监视器将会被触发。
  设置监视器的操作及对应的触发器

设置触发
器的操作
触发触发器的操作/受影响的节点
create

delete

setData
znode
子节点
znode
子节点







Exists
NodeCreated

NodeDeleted

NodeDataChanged
getData


NodeDeleted

NodeDataChanged
getChildren


NodeDeleted
NodeDeleted

  

  (2)数据访问控制
  每个znode创建时间都会有一个ACL列表,用于决定谁可以执行那些操作。
  (3)临时节点
  Zookeeper节点有两种:临时节点和持久节点。节点类型在创建时确定,并且不能修改。临时节点生命周期依赖创建它的会话,一旦会话结束,临时节点将会被删除。临时节点不允许有子节点。
  (4)顺序节点
  当创建znode 时设置了顺序节点,那么该znode路径之后便会附加一个递增的计数,这个计数对于此节点的父节点来说是唯一的。
  例如:一个客户端请求创建一个名为/a/b-的顺序节点,则所创建znode的名字可能是a/b-5,稍后另外一个名为/a/b-的顺序节点被创建,计数器会给出一个更大的值来保证znode名称的唯一性,例如/a/b-6。
  
  
  
页: [1]
查看完整版本: Zookeeper(六)数据模型