(1)hbase是乙個高可靠、高效能、面向列、可伸縮的分布式資料庫,是谷歌bigtable的開源實現,主要用來儲存非結構化和半結構化的鬆散資料。hbase的目標是處理非常龐大的表,通過水平擴充套件的方式,利用廉價計算機集群處理超過10億行資料和數百萬列元素組成的資料表。
(2)hbase與傳統的關聯式資料庫的區別主要體現在以下幾個方面。
1.資料型別關聯式資料庫採用關係模型,具有豐富的資料型別和儲存方式。hbase則採用了更加簡單的資料模型,它把資料儲存為未經解釋的字串,使用者可以把不同格式的結構化資料和非結構化資料都序列化成字串儲存到hbase中,使用者需要自己編寫程式把字串解析成不同的資料型別。
2.資料操作關聯式資料庫中包含了豐富的操作,如插人、刪除、更新、查詢等,其中會涉及複雜的多表連線,通常是借助於多個表之間的主外來鍵關聯來實現的。hbase操作則不存在複雜的表與表之間的關係,只有簡單的插人、查詢、刪除、清空等,因為hbase在設計上就避免了複雜
的表與表之間的關係,通常只採用單錶的主鍵查詢,所以它無法實現像關聯式資料庫中那樣的表與表之間的連線操作。
3.儲存模式關聯式資料庫是基於行模式儲存的,元組或行會被連續地儲存在磁碟頁中。在讀取資料時,需要順序掃瞄每個元組,然後從中篩選出查詢所需要的屬性。如果每個元組只有少量屬性的值對於查詢是有用的,那麼基於行模式儲存就會浪費許多磁碟空間和記憶體頻寬。
hbase是基於列儲存的,每個列族都由幾個檔案儲存,不同列族的檔案是分離的,它的優點是:可以降低io開銷,支援大量併發使用者查詢,因為僅需要處理可以回答這些查詢的列,而不需要處理與查詢無關的大量資料行;同乙個列族中的資料會被一起進行壓縮,由於同-列族內的資料相似度較
高,因此可以獲得較高的資料壓縮比。
**4.資料索引。**關聯式資料庫通常可以針對不同列構建複雜的多個索引,以提高資料訪問效能。與關聯式資料庫不同的是,hbase只有乙個索引行鍵, 通過巧妙的設計,hbase 中的所有訪問方法,或者通過行鍵訪問,或者通過行鍵掃瞄,從而使得整個系統不會慢下來。由於hbase位於adoop框架之上,因此可以使用hadoop 來快速、高效地生成索引表。
5.資料維護在關聯式資料庫中,更新操作會用最新的當前值去替換記錄中原來的舊值,舊值被覆蓋後就不會存在。而hbase中執行更新操作時,並不會刪除資料舊的版本,而是生成乙個新的版本,舊有的版本仍然保留。
6.可伸縮性關聯式資料庫很難實現橫向擴充套件,縱向擴充套件的空間也比較有限。相反,hbase和bigtable這些分布式資料庫就是為了實現靈活的水平擴充套件而開發的,因此能夠輕易地通過在集群中增加或者減少硬體數量來實現效能的伸縮。為谷費的器茂喜級最中發為文的回本政成發性,但是,相對於關聯式資料庫來說,hbase 也有自身的侷限性,如hbase不支援事務,因此無法實現跨行的原子性。
hbase訪問介面
(1)資料模型概述:
hbase是乙個稀疏、多維度、排序的對映表,這張表的索引是行鍵、列族、列限定符和時間戳。每個值是乙個未經解釋的字串,沒有資料型別。使用者在表中儲存資料,每一行都有乙個可排序的行鍵和任意多的列。表在水平方向由乙個或者多個列族組成,冊4個列族中可以包含任意多個列,同乙個列族裡面的資料儲存在一起。列族支援動態擴充套件,可以很輕鬆地新增乙個列族或多個列族,無需預先定義列的數量以及型別,所有列均以字串形式儲存,使用者需要自行進行資料型別轉換。由於同一張表裡面的每一行資料都可以有截然不同的列,因此對於整個對映表的每行資料而言,開有些列的值就是空的,所以說hbase是稀疏的。
在hbase中執行更新操作時。並不會刪除資料舊的版本,而是生成個新的版本,舊有的版本仍然保留,hbase 可以對允許保留的版本的數量進行設定。客戶端可以選擇獲取距離某個時間最近的版本,或者一次獲取所有版本。如果在查詢的時候不提供時間戳,那麼會返回距離現在最近的那乙個版本的資料,因為在儲存的時候,資料會按照時間戳排序。hbase提供了兩種資料版本**方式: 一是儲存資料的最後n個版本;二是儲存最近一段時間內的版本(如最近7天)。
(2)資料模型的相關概念:
1.表:
hbase採用表來組織資料,表由行和列組成,列劃分為若干個列族。
2.行:
每個hbase表都由若干行組成,每個行由行鍵( row key)來標識。訪問表中的行只有3種方式:通過單個行鍵訪問;通過乙個行鍵的區間來訪問;全表掃瞄。行鍵可以是任意字串(最大長度是64 kb,實際應用中長度一般為10~100位元組),在hbase內部,行鍵儲存為位元組陣列。儲存時,資料按照行鍵的字典序排序儲存。在設計行鍵時,要充分考慮這個特性,將經常一起讀取的行儲存在一起。
3.列族:
乙個hbase表被分組成許多「列族」的集合,他是基本的訪問控制單元,列族需要在表建立的時候就定義好,數量不能太多,不要頻繁修改,儲存在乙個列族中的所有資料,通常都屬於同一種資料型別,意味著有更高的壓縮率,表中的每個列都歸屬於某個列族,資料可以被存放在列族的某個列的下面。
4.列限定符:
列族裡邊的資料通過限定符來定位,列限定符不用事先定位,也不需要在不同行之間保持一致。列限定符沒有資料型別,總被視為位元組陣列byte
5.單元格:
在hbase表中,通過行、列族和列限定符確定乙個「單元格」。單元格中儲存的資料沒有資料型別,總被視為位元組陣列byte。每個單元格中可以儲存乙個資料的多個版本,每個版本對應乙個不同的時間戳
6.時間戳:
每個單元格都儲存著同-份資料的多個版本,這些版本採用時間戳進行索引。每次對乙個單元格執行操作(新建、修改、刪除)時,hbase都會隱式地自動生成並儲存乙個時間戳。時間戳一般是64位整型,可以由使用者自己賦值(自己生成唯一時間戳可以避免應用程式**現資料版本衝突),也可以由hbase在資料寫入時自動賦值。乙個單元格的不同版本是根據時間戳降序的順序進行儲存的,這樣,最新的版本可以被最先讀取。下面以乙個例項來闡釋hbase的資料模型。圖4-2是一張用來儲存學生資訊的hbase表,學號作為行鍵來唯一-標識每個學生,表中設計了列族info用來儲存學生相關資訊,列族info中包含3個列一一name major和email,分別用來儲存學生的姓名、專業和電子郵件資訊。學號為「201505003」的學生存在兩個版本的電子郵件位址,時間截分別為ts1-1174184619081和s2-184620720,時間戳較大的資料版本是最新的資料。
(3)資料座標:
hbase使用座標來定位表中的資料,也就是說,每個值都是通過座標來訪問的。對於我們熟悉的關聯式資料庫而言,資料定位可以理解為採用「二維座標",即根據行和列就可以確定表中乙個具體的值。但是,hbase中需要根據行鍵、列族、列限定符和時間戳來確定一= 個單元格,因此可以視為乙個「四維座標」,即[行鍵,列族,列限定符,時間戳]
(4)概念檢視
hbase是乙個稀疏的表,表中很多資料是空的。
(5)物理檢視
實際上把行鍵,時間戳和列族拿出來單獨儲存。
(6)面向列的儲存
傳統資料庫是面向行的儲存
優點對傳統事務性操作,會把各項資訊都存入資料庫,每一次都生成乙個完整的記錄
缺點分析一列資料時,取資料需要一行一行的取出,雖然每行只讀取乙個資料,但每一行都需要讀取,對資料分析不友好,且不可能達到很高的資料壓縮率
hbase面向列的儲存
優點很高的資料壓縮率,分析型應用為主時有優勢
輕鬆學習分布式 系列3 分布式資料庫。
我們繼續來講分布式,回到我們的創業遊戲。我們的業務規模上來了,客戶也越來越忠誠了。很多客戶都通過我們的訂票服務,來方便自己的行程。那對這些老客戶,我們的宗旨是 要不斷超越客戶的期待。所以,我們要建立我們的客戶資料庫。我們要記錄下每個客戶的偏好的航空公司,偏愛的酒店。下次服務,才能直接更好地服務客戶。...
分布式學習筆記(三) 分布式選舉
在乙個分布式集群中負責對其他節點的協調和管理,其他節點都必須聽從主節點的安排。主節點的存在,就可以保證其他節點的有序執行,以及資料庫集群中的寫入資料在每個節點上的一致性。這裡的一致性是指,資料在每個集群節點中都是一樣的,不存在不同的情況。選舉的作用就是選出乙個主節點,由它來協調和管理其他節點,以保證...
分布式資料庫筆記
1 資料庫事務正確執行的四個基本要素 以學生成績管理系統為例 原子性 a 當學生成績被錄入時,一種是完全被錄入,一種是完全不被錄入。這樣可以解決查到一半的問題。一致性 c 事務必須始終保持系統處於一致的狀態,不管在任何給定的時間 併發 事務有多少。例如 多個賬戶之間轉賬,不管怎麼轉,多個賬戶的總金額...