1. 程式人生 > >zookeeper學習系列(四)zookeeper資料模型

zookeeper學習系列(四)zookeeper資料模型

本文主要講述ZooKeeper的資料模型,包括ZooKeeper的資料檢視,節點的層次結構以及節點型別等基本屬性。Zookeeper的檢視結構類似標準的Unix檔案系統,但是沒有引入檔案系統相關概念:目錄和檔案,而是使用了自己特有的節點(node)概念,稱為znode。Znode是ZooKeeper中資料的最小單元,每個znode上都可以儲存資料,同時還可以掛載子節點,也構成了一個層次化的名稱空間,我們稱之為樹。

1 樹

首先我們來看下面這張圖,對ZooKeeper上的資料節點有一個大概的認識。這個圖來自zookeeper官方文件中,相信很多開發者在網上也都看到過很多次了。在ZK中,每一個數據節點稱為一個znode,所有znode按層次化進行組織,形成一棵樹。znode是一個跟Unix檔案系統路徑相似的節點,由一系列由斜槓(/ )進行分割的路徑表示。可以向這個節點中寫入資料,也可以在節點下面建立子節點。

085951545.png

2 節點型別

每個節點是有生命週期的,這取決於節點的型別。在ZooKeeper中,節點型別可以分為持久節點(PERSISTENT )、臨時節點(EPHEMERAL),以及時序節點(SEQUENTIAL ),具體在節點建立過程中,一般是組合使用,可以生成以下4種節點型別:

持久節點(PERSISTENT)

所謂持久節點,是指在節點建立後,就一直存在,直到有刪除操作來主動清除這個節點——不會因為建立該節點的客戶端會話失效而消失。

持久順序節點(PERSISTENT_SEQUENTIAL )

這類節點的基本特性和上面的節點型別是一致的。額外的特性是,在ZK中,每個父節點會為他的第一級子節點維護一份時序,會記錄每個子節點建立的先後順序。基於這個特性,在建立子節點的時候,可以設定這個屬性,那麼在建立節點過程中,ZK會自動為給定節點名加上一個數字字尾,作為新的節點名。這個數字字尾的上限是整型的最大值。

臨時節點(EPHEMERAL )

和持久節點不同的是,臨時節點的生命週期和客戶端會話繫結。也就是說,如果客戶端會話失效,那麼這個節點就會自動被清除掉。注意,這裡提到的是會話失效,而非連線斷開。另外,在臨時節點下面不能建立子節點。

臨時順序節點(EPHEMERAL_SEQUENTIAL)