ZooKeeper資料模型
基本資料模型
ZK資料模型是一個樹形結構,有點像前端的tree.js元件,也類似Linux作業系統的檔案系統,也是以樹的形式來儲存。嚴格來說是一顆多叉樹,每個節點上都可以儲存資料,每個節點還可以擁有N個子結點,最上層是根節點以“/”來代表。
在ZK中,每一個節點也被成為znode,它可以有子節點,也可以有資料。每個節點分為臨時節點和永久節點,臨時節點在客戶端斷開後消失。永久節點就相當於進行了持久化,只能人為的去刪除;臨時節點也可以人為的刪除,但是在session失效後,臨時節點的所有資料都會丟失。
每一個ZK節點都有各自的版本號,每當節點資料發生變化,那麼該節點的版本號會累加(樂觀鎖)。可以通過命令列來顯示節點的詳細資訊。
刪除/修改過時的節點,版本號不匹配則會報錯。比如在查詢某一個節點的時候,比如這時候版本是1,經過兩個人的刪除或者修改之後,這時候版本就會由1變為2再變為3。如果我們需要刪除這個節點,但是如果傳入的版本號是舊的版本號,那麼這時候就會報出一個版本號不匹配的異常,這個跟在資料庫中使用樂觀鎖很像(關於資料庫樂觀鎖可參看:https://blog.csdn.net/Dongguabai/article/details/82902790)。
每一個ZK節點儲存的資料量不宜過大,幾k即可,比如儲存一些比較簡單的物件或者size比較小的集合,不適合放很多很龐大的集合。每個節點還可以設定acl,可以通過許可權來限制使用者的訪問。
基本操作
在ZK的bin目錄下有很多可操作指令碼:
這裡使用:
./zkCli.sh
可以看到連線的是localhost:2181,再按下回車:
可以看到已經連線上localhost:2181,狀態是已經連線。
ls命令可以檢視指定目錄下的檔案:
可以看出zookeeper是quota的父節點,在quota中是沒有任何資料的。
Ctrl+c可以停止當前客戶端: