聊聊、Zookeeper 數據結構和操做命令

 Zookeeper 的視圖結構跟標準的 Unix 文件系統很像,都有一個根節點 / 。在根節點下面就是一個個的子節點,咱們稱爲 ZNode。ZNode 是 Zookeeper 中最小數據單位,在 ZNode 下面又能夠再掛 ZNode,這樣一層層下去就造成了一個層次化命名空間 ZNode 樹,咱們稱爲 ZNode Tree。對於 ZNode 節點,咱們能夠增刪改查操做,其實有不少的開源緩存框架和 Zookeeper 類似,只是數據結構不同。像 Redis、Memcache 等,都有本身的數據操做命令,以及本身的數據存儲結構。編程

 

1、【數據結構】緩存

 咱們先來看看 Zookeeper 的數據模型圖服務器

 

 在 Zookeeper 中,每個數據節點都是一個 ZNode,上圖根目錄下有兩個節點,分別是:app1 和 app2,其中 app1 下面又有三個子節點。那麼咱們來看看 ZNode 數據結構究竟是什麼樣子的呢。首先咱們來了解 ZNode 的類型。session

 ZNode 的類型有哪些?數據結構

 Zookeeper 節點類型能夠分爲三大類:持久性節點(Persistent)、臨時性節點(Ephemeral)、順序性節點(Sequential)。現實開發中在建立節點的時候經過組合能夠生成如下四種節點類型:持久節點、持久順序節點、臨時節點、臨時順序節點。app

 持久節點就是節點被建立後會一直存在服務器,直到刪除操做主動清除,這種節點也是最多見的類型。框架

 持久順序節點就是有順序的持久節點,節點特性和持久節點是同樣的,只是額外特性表如今順序上。順序特性實質是在建立節點的時候,會在節點名後面加上一個數字後綴,來表示其順序。spa

 臨時節點就是會被自動清理掉的節點,它的生命週期和客戶端會話綁在一塊兒,客戶端會話結束,節點會被刪除掉。與持久性節點不一樣的是,臨時節點不能建立子節點。命令行

 臨時書序節點就是有順序的臨時節點,和持久順序節點相同,在其建立的時候會在名字後面加上數字後綴。3d

 ZNode 的數據結構是怎麼樣的呢?

 咱們看看結構圖

 

 整個 ZNode 節點內容包括兩部分:節點數據內容和節點狀態信息。圖中 app1 是數據內容,其餘的屬於狀態信息。那麼這些狀態信息都有什麼含義呢?

 cZxid 就是 Create ZXID,表示節點被建立時的事務 ID。

 mZxid 就是 Modified ZXID,表示節點最後一次被修改時的事務 ID。

 ctime 就是 Create Time,表示節點建立時間。

 mtime 就是 Modified Time,表示節點最後一次被修改的時間。

 pZxid 表示該節點的子節點列表最後一次被修改時的事務 ID。只有子節點列表變動纔會更新 pZxid,子節點內容變動不會更新。

 cversion 表示子節點的版本號。

 dataVersion 表示內容版本號。

 dataLength 表示數據長度。

 numChildren 表示子節點數。

 ephemeralOwner 表示建立該臨時節點時的會話 sessionID,若是是持久性節點那麼值爲 0。

 

2、【操做命令】

 

 經過 Help 命令咱們看到 Zookeeper 提供不少的操做命令,咱們不去一一介紹,選幾個咱們常常用的吧。

 get path [watch] 命令 

 path 是路徑 [watch] 是監視器,通常咱們用 API 編程的時候,在 getData、exists、getChildren 時候會本身去實現一個 watcher,或者用默認的 watcher。在這裏 get 命令的用法能夠默認 watch 就行了,例如 get /app1。以下圖:

 

 你們注意 dataVersion = 0,這個是數據內容的版本號,Zookeeper 保證一致性,基本上都會有個版本控制。

 set path data [version] 命令

 path 是路徑 data 是數據內容 [version] 是版本號,咱們能夠經過 set /app1 newapp1 來更新節點 /app1 的內容,也能夠本身設置版本號,不過經過命令行去設置版本號經過 set /app1 newapp1 2。

 以下圖:

 

 你們能夠發現 dataVersion = 1,版本號默認加 1。

 delete path [version] 命令

 path 是節點路徑 [version] 版本號,以下圖:

 

 咱們再去 get 看看

 

 Node does not exists:/app1,app1 節點不存在了。

 create [-s] [-e] path data acl 命令

 這個命令後面的參數比較多,[-s] 順序節點,[-e] 臨時性節點,path 路徑,data 數據內容,acl 權限。咱們建立一個持久性節點。

 

 你們發現沒有,節點名後面加上了一串數字,這個就是 Zookeeper 順序標識。並且是持久性節點。

 

 臨時性節點 app2,關閉客戶端會話斷開會自動清除。

 

 謝謝你們觀看!

相關文章
相關標籤/搜索