每一个节点在zookeeper中用znode表示。znodes 包含数据变动和acl变动的版本号。znode一样包含时间戳。版本号和时间戳用来帮助zookeeper验证缓存或者协调更新。每次znode数据发生变化都会使版本号增长。例如,每次client接受数据时都会接收到数据的版本号。当client更新或者删除数据时必须给znode提供数据的版本号。若是提供的版本号与实际的版本号不匹配,更新操做会失败。html
znode是程序访问的主要实体类。包含以下特性:node
Watches 数据库
clients 能够为znode设置watch。znode发生改变将会触发watch。当一个watch触发,zookeeper会向client发送通知。apache
Data Access缓存
在namespace中存储在每一个znode上的数据发生的读写操做都是原子性的。读一个znode上的所有数据或者替换掉所有数据都是原子性的。每一个znode都有一个Access Contron List(ACL)用来约束哪些人能够执行相应操做。网络
Zookeeper不是用来作数据库或者存贮大对象的。相反,它只负责协调数据。数据能够来自配置表单、结构化信息等等。这些数据的有一个共同的特色那就是都很小:以Kb为测量单位。Zookeeper的client和server的实现类都会验证znode存储的数据是否小于1M,可是数据应该比平均值小的多。操做大数据将会触发一些消耗时间的额外操做而且影响潜在的操做,由于须要额外的时间在网络和存储介质上转移数据。若是有大数据须要存储,一般的办法是把这些数据存储在专门的大型文件系统上,例如NFS或者HDFS,而后把存储介质的位置存在zookeeper上。session
Ephemeral Nodes大数据
zookeeper有一种znode是ephemeral nodes。这些znode只在session存在期间有效。当session结束的时候这些ephemeral nodes被删除。因此ephemeral znodes不能有子节点。spa
Sequence Nodes -- Unique Namingorm
当建立一个znode时候,你也能够要求zookeeper在path的结尾单调递增。计数器对每个znode来讲都是惟一的。计数器使用%010d格式化--例如<path>0000000001。注意:计数器使用一个singed int(4bytes)来存储下一个序列值。因此计数器达到2147483647 后会溢出。
原文:http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html#sc_zkDataModel_znodes