最近專案中用到了hbase,使用的原因在於hbase可以提供高併發讀寫操作的支援,同時自動切分資料,使得資料儲存具有水平擴充套件性。
1 不能支援條件查詢,只支援按照row key來查詢.
2 暫時不能支援master server的故障切換,當master宕機後,整個儲存系統就會掛掉.
1.資料型別,hbase只有簡單的字元型別,所有的型別都是交由使用者自己處理,它只儲存字串。而關聯式資料庫有豐富的型別和儲存方式。在使用過程中,建立表的時候只感知到了建立列簇,指定過期時間等等,沒有感知到指定資料型別等操作。
2.資料操作:hbase只有很簡單的插入、查詢、刪除、清空等操作,表和表之間是分離的,沒有複雜的表和表之間的關係。
3.儲存模式:hbase是基於列儲存的,每個列族都由幾個檔案儲存,不同的列族的檔案時分離的。而傳統的關係型資料庫是基於**結構和行模式儲存的。
4.資料維護,hbase的更新操作不應該叫更新,它實際上是插入了新的資料,而傳統資料庫是替換修改 。這裡理解是乙個rowkey實際對應多份資料,按照插入資料的時間倒序,查詢時返回最後插入的乙份資料。
split負載均衡。hbase會將資料split到一定數量的region中來實現負載均衡。乙個table會被分到乙個或者多個region中。這些region會被分配到乙個或者多個regionserver中。在自動split策略中,每個region達到一定大小就會被自動split。split根據rowkey,同乙個rowkey對應的行只會在乙個region中。
如果沒有presplit,table剛剛建立的時候,所有的讀寫操作都會訪問到同乙個regionserver的同乙個region中。無法達到負載均衡的目的。同時,好像region自動split也是需要更多的效能和時間的(待確認,需要詳細看下split的過程)。通過**rowkey,確定需要pre-split的節點。
目前讀寫操作都需要通過rowkey,rowkey也決定了split的節點。
rowkey是乙個二進位製碼流,可以是任意字串,最大長度64kb,實際應用中一般為10-100bytes,以byte形式儲存,一般設計成定長。建議越短越好,不要超過16個位元組,原因如下:hbase與mysql的區別資料的持久化檔案hfile中是按照keyvalue儲存的,如果rowkey過長,比如超過100位元組,1000w行資料,光rowkey就要占用100*1000w=10億個位元組,將近1g資料,這樣會極大影響hfile的儲存效率;
memstore將快取部分資料到記憶體,如果rowkey欄位過長,記憶體的有效利用率就會降低,系統不能快取更多的資料,這樣會降低檢索效率。
目前作業系統都是64位系統,記憶體8位元組對齊,控制在16個位元組,8位元組的整數倍利用了作業系統的最佳特性。
對比mysql,一文看透hbase的能力及使用場景
mysql和hbase應用場景對比
hbase split的三種方式和split的過程
兩次hbase丟失資料的故障及原因分析
hbase split 簡介
hbase的rowkey的設計原則
mysql和hbase對比學習
關聯式資料庫大家都不陌生,使用乙個rdbms和hbase例子來說明。rdbms例子 資料 對比 那hbase是什麼樣的了?表設計 資料 hbase表的基本概念 row key 行主鍵,hbase不支援條件查詢和order by等查詢,讀取記錄只能按row key 及其range 或全表掃瞄,因此ro...
Hbase 學習筆記 Hbase 概覽
hbase構建在 hdfs 之上,hbase內部管理的檔案全部儲存在hdfs 中 行鍵,table的主鍵,table中的記錄按照row key排序。型別為byte array 列簇,table在水平方向有乙個或者多個column family組成,乙個column family中可以由任意多個col...
HBase學習筆記(一) 《HBase簡介》
hbase簡介 1 hbase表的結構 hbase以表 table 的形式儲存資料 row key 行鍵 與nosql資料庫們一樣,row key是用來檢索記錄的主鍵。row key行鍵 row key 可以是任意字串 最大長度是 64kb,實際應用中長度一般為 10 100bytes 在hbase...