Hadoop Database
便於時間查詢;
Hbase是一個分佈式的、面向列的開源數據庫,該技術來源於Chang et al所寫的Google論文“Bigtable:一個結構化數據的分佈式存儲系統”。
就像Bigtable利用了Google文件系統(File System)所提供的分佈式數據存儲一樣,HBase在Hadoop之上提供了類似於Bittable的能力。
HBase是Apache的Hadoop項目的子項目。
HBase不同於一般的關係數據庫,它是一個適合於非結構化數據存儲的數據庫,另一個不同的是HBase基於列的而不是基於行的模式。
BIG Table表的想法:
以存放關係的學生表爲例:
用bigtable的想法爲,三個列的大表:學號(key)、屬性(姓名、年齡、、、)、值(value)
世界上所有的二維表,都可以用三個列的大表來表示:
行鍵(key)對象的標識值、
屬性、
Value
Bigtable表查詢: 對key-value的查詢很快
HBase邏輯模型:
以表的形式存放數據;
表由行與列組成,每個列屬於某個列族,由行和列確定的存儲單元稱爲元素;
每個元素保存了同一份數據的多個版本,由時間戳來標識區分;
HABASE有多表
列族需要預先定義,列族裏面的列不需要預先定義列族裏面的列由限定符限制;
行鍵可以重複;
HBASE解決HDFS文件系統不能修改問題:
打刪除標記
在內存中建立機制,數據存儲內存,數據在內存中修改(追加、)內存中數據重整機制、
內存中收集一定時間的數據後,向硬盤中一寫就一個文件一個塊
每隔一斷時間進行一數據重整合並,合併小的文件,解決刪除問題
行鍵:
行鍵是數據行在表裏的唯一標識,並作爲檢索記錄的主鍵;
訪問表裏的行只有三種方式:
通過單個行鍵訪問
給定行鍵的範圍訪問
全表掃描
行鍵可以是最大長度不超過64kb的任意字符串,並按照字典序存儲;
對於經常要一起讀取的行,要對行鍵值精心設計,以便它們能放在一起存儲;
列族與列:
列表示爲<列族>:<限定符>
列族是預先定義好的,列族中的列是隨意添加的。
Hbase在磁盤上按照列族存儲數據,這種列式數據庫的設計非常適合於數據分析的情形;
列族裏的元素最好具有相同的讀寫方式(例如等長的字符串),以提高性能;
面向列存儲意義:在行鍵相同的情況下,列族相同的會放在一起,
時間戳:
對應每次數據操作的時間,可由系統自動生成,也可以由用戶顯示的賦值;
HBase支持兩種數據版本回收方式:
1、每個數據單元,只存儲指定個數的最新版本
2、保存指定時間長度的版本
常見的客戶端時間查詢“某個時刻起的最新數據”或“給我全部版本的數據”
元素由行鍵,列族限定符,時間戳唯一決定;
元素以字節碼形式存放,沒有類型之分;
Hbase物理模型:
Region和Region服務器:
表在行方向上,按照行鍵範圍劃分成苦幹的Region;
每個表最初只有一個region,當記錄數增加到超過某個閾值時,開始分裂成兩個region;
物理上所有數據存放HDFS,由region服務器提供region的管理;
一臺物理節點只能跑一個 HRedionServer;
一個 HRegionserver可以管理多個Region實例;
一個Region實例包括Hlog日誌和存放數據的Store;
Hmaster作爲總控節點;
Zookeeper負責調度;
Hlog:
用於災難恢復;
預寫式日誌,記錄所有更新操作,操作先記錄日誌,數據纔會寫入
-ROOT-和 .META. 表
HBase中兩張特殊的表
.META. -----à記錄了用戶表的Region信息, .META. 可以有多個region;
-ROOT- -----à記錄了 .META.表的region信息, --ROOT- 只有一個region;
Zookeeper中記錄了 –ROOT-表的location
Memstore與storefile:
一個region由多個store組成,每個store包含一個列族的所有數據;
Store包括位於把內在的memstore和位於硬盤的storefile;
寫操作先寫memstore,當memstore中的數據量達到某個閾值,Hregionserver會啓動flashcache進程寫入storefile,每次寫入形成單獨的一個storefile;
當storefile文件的數量增長到一定閾值後,系統會進行合併,在合併過程中會進行版本合併和刪除工作,形成更大的storefile;
當storefile大小超過一定閾值後,會把當前的region分割爲兩個,並由hmaster分配,到相應的region服務器,實現負載均衡;
客戶端檢索數據時,先在memstore找,找不到再找storefile;
Hbase應用場景:
適用於大量寫,同時也有讀的(key --- value查詢、時間)
OLTP/OLAP不適合;聯機事務處理,隨機讀寫;
很適合按照時間排序top n的場景(社交網站等)
Hbase瓶頸是硬盤寫, oracle瓶頸是硬盤尋道時間,
列式數據庫與行式數據庫對比:
減少I/O讀取量。
壓縮,減少磁盤佔用;