關聯式資料庫大家都不陌生,使用乙個rdbms和hbase例子來說明。
rdbms例子:
資料:
對比:
那hbase是什麼樣的了?
表設計:
資料:
hbase表的基本概念:
row key:行主鍵, hbase不支援條件查詢和order by等查詢,讀取記錄只能按row key(及其range)或全表掃瞄,因此row key需要根據業務來設計以利用其儲存排序特性(table按row key字典序排序如1,10,100,11,2)提高效能。
column family(列族):在表建立時宣告,每個column family為乙個儲存單元。在上例中表有兩個列族:article和author。
column(列):hbase的每個列都屬於乙個列族,以列族名為字首,如列article:title和article:content屬於article列族。column不用建立表時定義即可以動態新增,同一column family的columns會群聚在乙個儲存單元上,並依column key排序,因此設計時應將具有相同i/o特性的column設計在乙個column family上以提高效能。同時這裡需要注意的是:這個列是可以增加和刪除的,這和我們的傳統資料庫很大的區別。所以他適合非結構化資料。
timestamp:hbase通過row和column確定乙份資料,這份資料的值可能有多個版本,不同版本的值按照時間倒序排序,即最新的資料排在最前面,查詢時預設返回最新版本。
value:每個值通過4個鍵唯一索引,tablename+rowkey+columnkey+timestamp=>value,例如上例中 索引到的唯一值是「yedu」。
儲存型別:
tablename 是字串
rowkey 和 columnname 是二進位制值(j**a 型別 byte)
timestamp 是乙個 64 位整數(j**a 型別 long)
value 是乙個位元組陣列(j**a型別 byte)。
hbase使用場景:
半結構化或非結構化資料:對於資料結構字段不夠確定或雜亂無章很難按乙個概念去進行抽取的資料適合用hbase。以上面的例子為例,當業務發展需要儲存author的email,phone,address資訊時rdbms需要停機維護,而hbase支援動態增加。
記錄非常稀疏:rdbms的行有多少列是固定的,為null的列浪費了儲存空間。而如上文提到的,hbase為null的column不會被儲存,這樣既節省了空間又提高了讀效能。
多版本資料:上文提到的根據row key和column key定位到的value可以有任意數量的版本值,因此對於需要儲存變動歷史記錄的資料,用hbase就非常方便了。比如上例中的author的address是會變動的,業務上一般只需要最新的值,但有時可能需要查詢到歷史值。
超大資料量:當資料量越來越大,rdbms資料庫撐不住了,需要分庫分表。大資料的hbase就簡單了,只需要加機器即可,hbase會自動水平切分擴充套件,跟hadoop的無縫整合保障了其資料可靠性(hdfs)和海量資料分析的高效能(mapreduce)
HBase學習和使用
最近專案中用到了hbase,使用的原因在於hbase可以提供高併發讀寫操作的支援,同時自動切分資料,使得資料儲存具有水平擴充套件性。1 不能支援條件查詢,只支援按照row key來查詢.2 暫時不能支援master server的故障切換,當master宕機後,整個儲存系統就會掛掉.1.資料型別,h...
HBase與Hive的對比
1 hive 1 資料倉儲 hive的本質其實就相當於將hdfs中已經儲存的檔案在mysql中做了乙個雙射關係,以方便使用hql去管理查詢。2 用於資料分析 清洗 hive適用於離線的資料分析和清洗,延遲較高。3 基於hdfs mapreduce hive儲存的資料依舊在datanode上,編寫的h...
HBase與Hive的對比
1 hive 1 資料倉儲 hive的本質其實就相當於將hdfs中已經儲存的檔案在mysql中做了乙個雙射關係,以方便使用hql去管理查詢。2 用於資料分析 清洗 hive適用於離線的資料分析和清洗,延遲較高。3 基於hdfs mapreduce hive儲存的資料依舊在datanode上,編寫的h...