在hbase中,大部分的操作都是在regionserver完成的,client端想要插入,刪除,
查詢資料都需要先找到相應的 regionserver。0.96版本之前hbase內建兩張表'.meta.','-root-',這兩張表儲存region的分布情況以及每個region的詳細資訊,'-root-'表記錄'.meta.'表的redion分布資訊,'.meta.'表記錄使用者定義表region資訊。0.96版本之後'-root-'表去掉了,只有'mate'表。
內建表的表結構:
我們來仔細分析一下這個結構,每條row記錄了乙個region的資訊。
首先是rowkey,rowkey由三部分組成:tablename, startkey 和 timestamp。rowkey儲存的內容我們又稱之為region的name。用來存放region的檔案 夾的名字是regionname的hash值,因為regionname可能包含某些非法字元。現在你應該知道為什麼regionname會包含非法字元 了吧,因為startkey是被允許包含任何值的。將組成rowkey的三個部分用逗號連線就構成了整個rowkey,這裡timestamp使用十進位制 的數字字串來表示的。這裡有乙個rowkey的例子:
table1,rk10000,12345678
然後是表中最主要的family:info,info裡面包含三個column:regioninfo, server, serverstartcode。其中regioninfo就是region的詳細資訊,包括startkey, endkey 以及每個family的資訊等等。server儲存的就是管理這個region的regionserver的位址。
所以當region被拆分、合併或者重新分配的時候,都需要來修改這張表的內容。
1、client訪問zookeeper,查詢'-root-'表的儲存位址,獲取儲存'-root-'表的regionserver
2、通過'-root-表獲取'.meta.'表的regionserver
3、從.meta.表裡面
查詢哪個region包含這條資料,獲取管理這個region的regionserver位址
4、連線這個regionserver, 查到這條資料。
hbase0.96版本後刪除了root 表,因為覺的目的是根據root表獲取meta位址,過程是通過zookeeper獲取root表位址,在根據root表記錄meta表位址進行訪問,還不如和zookeeper通訊一次
1、client訪問zookeeper,查詢'meta'表的儲存位址,獲取儲存'meta'表的regionserver
2、從mate表裡面
查詢哪個region包含這條資料,並獲取regionserver位址
3、連線這個regionserver, 查到這條資料
下面介紹下的client與region server查詢互動過程。
1、查詢memstore(memstore是乙個按key排序的樹形結構的緩衝區),即寫記憶體是否儲存rowkey資料,如果有就返回,沒有進行第二步查詢;
2、查詢region server的讀快取blockcache 是否存在rowkey對應資料,如果有就返回,沒有的話就行進行第三步查詢。
3、在hfile裡面根據rowkey查詢資料,不管有沒有都返回到client。
參考文獻
Elasticsearch查詢過程
客戶端向集群中的某個節點 假設節點1 發起查詢請求,節點1會建立乙個from size大小的佇列 from 偏移量,size 要取回的文件個數 節點1向集群中所有其他的分片 主或從 發起查詢請求,每個分片也會建立乙個from size大小的佇列,並將查詢結果新增到佇列中。其他分片將查詢到的文件id和...
屬性查詢過程
import numbers class intfield 資料屬性描述符 實現了get和set def get self,instance,owner return self.value def set self,instance,value if not isinstance value,num...
DNS查詢過程
dns domain name system 將網域名稱和ip位址相互對映的乙個分布式資料庫服務。dns使用的是網路查詢,使用的埠是53號埠 通常dns是以udp資料傳輸協議來查詢的,當沒有查詢到完整的資訊時,就會再次以tcp這個協議來重新查詢。所以在啟動dns時,會同時啟動tcp和udp的53號埠...