轉載請註明:@ni掌櫃 nileader@gmail.comnode
本文主要講述ZooKeeper的數據模型,包括ZooKeeper的數據視圖,節點的層次結構以及節點類型等基本屬性。Zookeeper的視圖結構相似標準的Unix文件系統,可是沒有引入文件系統相關概念:目錄和文件,而是使用了本身特有的節點(node)概念,稱爲znode。Znode是ZooKeeper中數據的最小單元,每一個znode上均可以保存數據,同時還能夠掛載子節點,也構成了一個層次化的命名空間,咱們稱之爲樹。sql
樹ide
首先咱們來看下面這張圖,對ZooKeeper上的數據節點有一個大概的認識。這個圖來自zookeeper官方文檔中,相信不少開發者在網上也都看到過不少次了。在ZK中,每個數據節點稱爲一個znode,全部znode按層次化進行組織,造成一棵樹。znode是一個跟Unix文件系統路徑類似的節點,由一系列由斜槓(/ )進行分割的路徑表示。能夠向這個節點中寫入數據,也能夠在節點下面建立子節點。spa
節點類型命令行
每一個節點是有生命週期的,這取決於節點的類型。在ZooKeeper中,節點類型能夠分爲持久節點(PERSISTENT )、臨時節點(EPHEMERAL),以及時序節點(SEQUENTIAL ),具體在節點建立過程當中,通常是組合使用,能夠生成如下4種節點類型:blog
持久節點(PERSISTENT)生命週期
所謂持久節點,是指在節點建立後,就一直存在,直到有刪除操做來主動清除這個節點——不會由於建立該節點的客戶端會話失效而消失。事務
持久順序節點(PERSISTENT_SEQUENTIAL )開發
這類節點的基本特性和上面的節點類型是一致的。額外的特性是,在ZK中,每一個父節點會爲他的第一級子節點維護一份時序,會記錄每一個子節點建立的前後順序。基於這個特性,在建立子節點的時候,能夠設置這個屬性,那麼在建立節點過程當中,ZK會自動爲給定節點名加上一個數字後綴,做爲新的節點名。這個數字後綴的上限是整型的最大值。文檔
臨時節點(EPHEMERAL )
和持久節點不一樣的是,臨時節點的生命週期和客戶端會話綁定。也就是說,若是客戶端會話失效,那麼這個節點就會自動被清除掉。注意,這裏提到的是會話失效,而非鏈接斷開。另外,在臨時節點下面不能建立子節點。
臨時順序節點(EPHEMERAL_SEQUENTIAL)
節點信息
[zk: localhost:2181(CONNECTED) 4] get /YINSHI.MONITOR.ALIVE.CHECK
?t 10.232.102.191:21811353595654255
cZxid = 0x300000002
ctime = Thu Dec 08 23:29:53 CST 2011
mZxid = 0xe00008bbf
mtime = Thu Jul 28 07:17:34 CST 2012
pZxid = 0x300000002
cversion = 0
dataVersion = 2164293
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 39
numChildren = 0
上面這個信息,是在ZK命令行的一個輸出信息,從這個輸出內容中能夠清楚的看到,ZK的一個節點包含了哪些信息。其中比較重要的信息包括節點的數據內容,節點建立/修改的事務ID,節點/修改建立時間,當前的數據版本號,數據內容長度,子節點個數等。