(九)、ZooKeeper數據模型

類似於文件系統的目錄樹型結構,相同於Hadoop HDFS,如下圖:

             

圖中的每個節點稱爲一個znode(節點). 每個znode由3部分組成:

  • stat. 此爲狀態信息, 描述該znode的版本, 權限等信息.
  • data. 與該znode關聯的數據.
  • children. 該znode下的子節點(臨時數據不能有子節點,只有持久化纔能有子節點)
如:znode(節點)
/NameService/Server1唯一路徑(Node),且攜帶數據。


ZNode節點。

ZooKeeper名字由節點(Znode)構成,其組織方式類似於文件系統,其中各個節點相當於目錄和文件,通過路徑作爲唯一標示。 與文件系統不同的是,每個節點具有與之相對應的數據內容,同時也可以具有子節點。
ZooKeeper用於存儲協調數據,如狀態、配置、位置等信息,每個節點存儲的數據很小,KB級別。
       節點維護與一個狀態Stat結構(包括數據變化的版本號、ACL變化、時間戳),以允許緩存驗證與協調更新。每當節點數據內容改變,多一個版本號(類似於HBase)。客戶端讀取數據的同時也會獲取數據版本號。節點的數據內容以原子方式讀寫。
節點具有一個訪問控制列表(Access Control List - ACL)來約束訪問操作,即具有權限控制。
ZooKeeper的節點是通過像樹一樣的結構來進行維護的,並且每一個節點通過路徑來標示以及訪問。除此之外,每一個節點還擁有自身的一些信息,包括:數據、數據長度、創建時間、修改時間等等。從這樣一類既含有數據,又作爲路徑表標示的節點的特點中,可以看出,ZooKeeper的節點既可以被看做是一個文件,又可以被看做是一個目錄,它同時具有二者的特點。爲了便於表達,今後我們將使用Znode來表示所討論的ZooKeeper節點。
具體地說,Znode維護着數據、ACL(access control list,訪問控制列表)、時間戳等交換版本號等數據結構,它通過對這些數據的管理來讓緩存生效並且令協調更新。每當Znode中的數據更新後它所維護的版本號將增加,這非常類似於數據庫中計數器時間戳的操作方式。
另外Znode還具有原子性操作的特點:命名空間中,每一個Znode的數據將被原子地讀寫。讀操作將讀取與Znode相關的所有數據,寫操作將替換掉所有的數據。除此之外,每一個節點都有一個訪問控制列表,這個訪問控制列表規定了用戶操作的權限。
ZooKeeper中同樣存在臨時節點。這些節點與session同時存在,當session生命週期結束,這些臨時節點也將被刪除。臨時節點在某些場合也發揮着非常重要的作用。


znode節點的狀態信息

使用get命令獲取指定節點的數據時, 同時也將返回該節點的狀態信息, 稱爲Stat. 其包含如下字段:如圖:

   

  • 第一行表示這個節點的數據(thisisdata!)
  • czxid. 節點創建時的zxid.
  • mzxid. 節點最新一次更新發生時的zxid.
  • ctime. 節點創建時的時間戳.
  • mtime. 節點最新一次更新發生時的時間戳.
  • dataVersion. 節點數據的更新次數.
  • cversion. 其子節點的更新次數.
  • aclVersion. 節點ACL(授權信息)的更新次數.
  • ephemeralOwner. 如果該節點爲ephemeral節點, ephemeralOwner值表示與該節點綁定的session id. 如果該節點不是ephemeral節點, ephemeralOwner值爲0. 至於什麼是ephemeral節點, 請看後面的講述.
  • dataLength. 節點數據的字節數.
  • numChildren. 子節點個數.





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章