每一個節點在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