[ZooKeeper] 資料模型
資料模型
原文連結:http://blog.51cto.com/nileader/946788
作者:@ni掌櫃 [email protected]
正文
本文主要講述ZooKeeper的資料模型,包括ZooKeeper的資料檢視,節點的層次結構以及節點型別等基本屬性。Zookeeper的檢視結構類似標準的Unix檔案系統,但是沒有引入檔案系統相關概念:目錄和檔案,而是使用了自已特有的節點(node)概念,稱為znode。Znode是ZooKeeper中資料的最小單元,每個znode上都可以儲存資料,同時還可以掛載子節點,也構成了一個層次化的名稱空間,我們稱之為樹。
樹
首先我們來看下面這張圖,對ZooKeeper上的資料節點有一個大概的認識。這個圖來自ZooKeeper官方文件中,相信很多開發者在網上也都看到過很多次了。在ZK中,每一個數據節點稱為一個znode,所有znode按層次化進行組織,形成一棵樹。znode是一個跟Unix檔案系統路徑相似的節點,由一系列斜槓(/)進行分割的路徑表示。可以向這個節點中寫入資料,也可以在節點下面建立子節點。
節點型別
每個節點是有生命週期的,這取決於節點的型別。在ZooKeeper中,節點型別可以分為持久節點(PERSISTENT)、臨時節點(EPHEMERAL),以及時序節點(SEQUENTIAL),具體在節點建立過程中,一般是組合使用,可以生成以下4種節點型別:
持久節點(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,節點/修改建立時間,當前的資料版本號,資料內容長度,子節點個數等。