zookeeper學習系列(四)zookeeper資料模型
本文主要講述ZooKeeper的資料模型,包括ZooKeeper的資料檢視,節點的層次結構以及節點型別等基本屬性。Zookeeper的檢視結構類似標準的Unix檔案系統,但是沒有引入檔案系統相關概念:目錄和檔案,而是使用了自己特有的節點(node)概念,稱為znode。Znode是ZooKeeper中資料的最小單元,每個znode上都可以儲存資料,同時還可以掛載子節點,也構成了一個層次化的名稱空間,我們稱之為樹。
1 樹
首先我們來看下面這張圖,對ZooKeeper上的資料節點有一個大概的認識。這個圖來自zookeeper官方文件中,相信很多開發者在網上也都看到過很多次了。在ZK中,每一個數據節點稱為一個znode,所有znode按層次化進行組織,形成一棵樹。znode是一個跟Unix檔案系統路徑相似的節點,由一系列由斜槓(/ )進行分割的路徑表示。可以向這個節點中寫入資料,也可以在節點下面建立子節點。
2 節點型別
每個節點是有生命週期的,這取決於節點的型別。在ZooKeeper中,節點型別可以分為持久節點(PERSISTENT )、臨時節點(EPHEMERAL),以及時序節點(SEQUENTIAL ),具體在節點建立過程中,一般是組合使用,可以生成以下4種節點型別:
持久節點(PERSISTENT)
所謂持久節點,是指在節點建立後,就一直存在,直到有刪除操作來主動清除這個節點——不會因為建立該節點的客戶端會話失效而消失。
持久順序節點(PERSISTENT_SEQUENTIAL )
這類節點的基本特性和上面的節點型別是一致的。額外的特性是,在ZK中,每個父節點會為他的第一級子節點維護一份時序,會記錄每個子節點建立的先後順序。基於這個特性,在建立子節點的時候,可以設定這個屬性,那麼在建立節點過程中,ZK會自動為給定節點名加上一個數字字尾,作為新的節點名。這個數字字尾的上限是整型的最大值。
臨時節點(EPHEMERAL )
和持久節點不同的是,臨時節點的生命週期和客戶端會話繫結。也就是說,如果客戶端會話失效,那麼這個節點就會自動被清除掉。注意,這裡提到的是會話失效,而非連線斷開。另外,在臨時節點下面不能建立子節點。
臨時順序節點(EPHEMERAL_SEQUENTIAL)
相關推薦
zookeeper學習系列(四)zookeeper資料模型
本文主要講述ZooKeeper的資料模型,包括ZooKeeper的資料檢視,節點的層次結構以及節點型別等基本屬性。Zookeeper的檢視結構類似標準的Unix檔案系統,但是沒有引入檔案系統相關概念
zookeeper學習系列(五)zookeeper分散式鎖機制
大家也許都很熟悉了多個執行緒或者多個程序間的共享鎖的實現方式了,但是在分散式場景中我們會面臨多個Server之間的鎖的問題,實現的複雜度比較高。利用基於google chubby原理開發的開源的zookeeper,可以使得這個問題變得簡單很多。下面介紹幾種可能的實現方式
zookeeper學習系列(三)zookeeper基本原理
ZooKeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,它包含一個簡單的原語集,分散式應用程式可以基於它實現同步服務,配置維護和命名服務等。Zookeeper是hadoop的一個子專案。在分散式應用中,由於工程師不能很好地使用鎖機制,以及基於訊息的協調機制
zookeeper學習系列(二)zookeeper簡介(續)
1 一致性 <1>讀操作 由於效能的原因,讀操作由zookeeper服務的記憶體提供,而且不參與寫操作的全域性排序,這一特性 會導致使用機制交流的客戶端與zookeeper狀態不一致。 為了避免這種情況,可以在讀之前能進行sync,它會強制它臉上的zookeep
C語言學習系列(四)C語言基本語法和數據類型
.html 二進制 占用 efault html pac 精度 es2017 %d 一、基本語法 C的令牌(Tokens) C 程序由各種令牌組成,令牌可以是關鍵字、標識符、常量、字符串值,或者是一個符號。 關鍵字(保留字) auto else long swit
Flask 學習系列(四)---Jinjia2 模板繼承
list size border padding sub -- margin nbsp 中文 1.基模板 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF
Html5 學習系列(四)文件操作API
activex 出了 1.0 for AD con dsta buffer 們的 原文:Html5 學習系列(四)文件操作API 引言 在之前我們操作本地文件都是使用flash、silverlight或者第三方的activeX插件等技術,由於使用了這些技術後
日誌學習系列(四)——NLog實例
bsp 分享 安裝 不想 介紹 simple get sim 解決方案 具體不想介紹了,新建一個解決方案 ,直接用NuGet安裝就行了 具體項目代碼可以在https://github.com/qiuxianhu/SimpleNLog下載日誌學習系列(四)——NLo
Python自動化學習筆記(四)——Python資料型別(集合set,元組tuple)、修改檔案、函式、random常用方法
1.修改檔案的兩種方式 1 #第一種 2 with open('users','a+') as fw: #用a+模式開啟檔案,使用with這種語法可以防止忘記close檔案 3 fw.seek(0) #移動檔案指標到最前面,然後才能讀到內容 4 result=fw.read()
分散式快取技術redis學習系列(四)——redis高階應用(叢集搭建、叢集分割槽原理、叢集操作)
Redis叢集簡介 Redis 叢集是3.0之後才引入的,在3.0之前,使用哨兵(sentinel)機制(本文將不做介紹,大家可另行查閱)來監控各個節點之間的狀態。Redis 叢集可謂是讓很多人久等了。 Redis 叢集是一組能進行資料共享的Redis 例項(
docker學習系列(四)製作基礎的base專案映象--jdk+tomcat
前面已經完成了docker的安裝以及使用,現在我們要將自己的javaweb專案與docker結合 1.1準備jdk+tomcat軟體 我下載了apache-tomcat-7.0.68.tar.gz
ZooKeeper學習總結(3)——ZooKeeper常見面試題
Zookeeper是什麼框架 分散式的、開源的分散式應用程式協調服務,原本是Hadoop、HBase的一個重要元件。它為分散式應用提供一致性服務的軟體,包括:配置維護、域名服務、分散式同步、組服務等。應用場景 Zookeeper的功能很強大,應用場景很多,結合我實際工作中使用Dubbo框架的情況,Zookee
SpringMVC學習系列(6) 之 資料驗證
在系列(4)、(5)中我們展示瞭如何繫結資料,繫結完資料之後如何確保我們得到的資料的正確性?這就是我們本篇要說的內容 —> 資料驗證。 這裡我們採用Hibernate-validator來進行驗證,Hibernate-validator實現了JSR-303驗證框架支援註解風格的驗證。首先我們要到htt
Live555學習筆記(四)—— RTP資料流向分析
void MultiFramedRTPSink ::afterGettingFrame1(unsigned frameSize, unsigned numTruncatedBytes, struct timeval presentationTime, unsigned durati
程式設計師之網路安全系列(四):資料加密之非對稱祕鑰
系列目錄: 前文回顧 假如,明明和麗麗相互不認識,明明想給麗麗寫一封情書,讓隔壁老王送去 如何保證隔壁老王不能看到情書內容?(保密性) 如何保證隔壁老王不修改情書的內容?(完整性) 如何保證隔壁老王不冒充明明?(身份認證) 如何保證明明不能否認情書是自己寫的?(來源的不可否認) 但是上面的問題是明
Spring MVC學習(四) 處理資料模型
Spring MVC提供了以下幾種方式輸出模型資料: 1.使用ModelAndView輸出模型資料,程式碼如下: <a href="TestRequestMapping/TestModelAndView">TestModelAndView<
MYSQL學習筆記(四)高階資料過濾
組合WHERE子句 (1)AND操作符 WHERE ——=—— AND ——=—— 注意若為字母及字母與數字,需加’ ’,而純數字不必;可以多加AND構成多個條件 (2)OR操作符 WHER
docker系列(四):資料卷
1 引言 容器就相當於一個簡易的作業系統,我們在上面部署我們的環境,不可避免地產生一些資料,但是,可能由於斷電等等原因,容器退出了,那麼之前容器中的資料就不符存在,則往往不是我們想要的,更多的,我們是希望資料能夠持久儲存到硬碟中,這就需要用到資料卷。 資料卷是指一種目錄或者說檔案,其存在於一個或者多個容器
PowerDesigner教程系列(三)概念資料模型
目標:本文主要介紹屬性的標準檢查約束、如何定義屬性的附加檢查。一、定義屬性的標準檢查約束標準檢查約束是一組確保屬性有效的表示式。在實體屬性的特性視窗,開啟如圖所示的檢查選項卡。在這個選項卡可以定義屬性的標準檢查約束,視窗中每項的引數的含義,如下 引
java 學習筆記(四) java連接ZooKeeper
事件 pre case 啟動 sync -m 服務 persist 刪除節點 public class Demo2 { public static void main(String[] args) { String connectString = "192.168.