如何理解hbase列存儲
A. 為什麼說HBase是列式資料庫
Hbase是一個面向列存儲的分布式存儲系統,它的優點在於可以實現高性能的並發讀寫操作,同時Hbase還會對數據進行透明的切分,這樣就使得存儲本身具有了水平伸縮性。
通常,順序讀取數據要比隨機訪問更快。而且,硬碟定址時間的提升比起CPU速度的進步要慢得多 (參看摩爾定律),在使用硬碟作為存儲媒介的系統上這種情況很可能還會持續一段時間。
下面簡單羅列了一些選擇行資料庫還是列資料庫的權衡依據。當然,如果能夠把數據全放在內存中,那麼使用內存資料庫性能會更好。
特點:
因為硬碟定址時間相較於計算機上其他部件的運行速度來說不是一般的慢,所以常用相同工作負載下的硬碟訪問性能來比較行資料庫和列資料庫。
在只需要根據某幾列來聚合數據的時候按列的數據組織方式更有效。因為這樣只需要讀取一部分數據,要比讀取全部數據更快。
當只需要修改某一列值的時候按列的數據組織方式更有效。因為可以直接找到某列數據並改,而與行中的其他列無關。
B. 解讀Hadoop Hbase適合存儲哪類數據
最適合使用Hbase存儲的數據是非常稀疏的數據(非結構化或者半結構化的數據)。Hbase之所以擅長存儲這類數據,是因為Hbase是column-oriented列導向的存儲機制,而我們熟知的RDBMS都是row- oriented行導向的存儲機制(郁悶的是我看過N本關於關系資料庫的介紹從來沒有提到過row- oriented行導向存儲這個概念)。在列導向的存儲機制下對於Null值得存儲是不佔用任何空間的。比如,如果某個表 UserTable有10列,但在存儲時只有一列有數據,那麼其他空值的9列是不佔用存儲空間的(普通的資料庫MySql是如何佔用存儲空間的呢?)。 Hbase適合存儲非結構化的稀疏數據的另一原因是他對列集合 column families 處理機制。 打個比方,ruby和python這樣的動態語言和c++、java類的編譯語言有什麼不同? 對於我來說,最顯然的不同就是你不需要為變數預先指定一個類型。Ok ,現在Hbase為未來的DBA也帶來了這個激動人心的特性,你只需要告訴你的數據存儲到Hbase的那個column families 就可以了,不需要指定它的具體類型:char,varchar,int,tinyint,text等等。 Hbase還有很多特性,比如不支持join查詢,但你存儲時可以用:parent-child tuple 的方式來變相解決。 由於它是Google BigTable的 Java 實現,你可以參考一下:google bigtable 。
解讀Hadoop Hbase適合存儲哪類數據,參考:http://e.51cto.com/course/course_id-3819.html
C. HBase是什麼為什麼要使用HBase
HBase在產品中還包含了Jetty,在HBase啟動時採用嵌入式的方式來啟動Jetty,因此可以通過web界面對HBase進行管理和查看當前運行的一些狀態,非常輕巧。為什麼採用HBase?HBase 不同於一般的關系資料庫,它是一個適合於非結構化數據存儲的資料庫.所謂非結構化數據存儲就是說HBase是基於列的而不是基於行的模式,這樣方面讀寫你的大數據內容。 HBase是介於Map Entry(key & value)和DB Row之間的一種數據存儲方式。就點有點類似於現在流行的Memcache,但不僅僅是簡單的一個key對應一個 value,你很可能需要存儲多個屬性的數據結構,但沒有傳統資料庫表中那麼多的關聯關系,這就是所謂的鬆散數據。 簡單來說,你在HBase中的表創建的可以看做是一張很大的表,而這個表的屬性可以根據需求去動態增加,在HBase中沒有表與表之間關聯查詢。你只需要 告訴你的數據存儲到Hbase的那個column families 就可以了,不需要指定它的具體類型:char,varchar,int,tinyint,text等等。但是你需要注意HBase中不包含事務此類的功 能。 Apache HBase 和Google Bigtable 有非常相似的地方,一個數據行擁有一個可選擇的鍵和任意數量的列。表是疏鬆的存儲的,因此用戶可以給行定義各種不同的列,對於這樣的功能在大項目中非常實用,可以簡化設計和升級的成本。
D. 傳統的行存儲和(HBase)列存儲的區別
列存儲不同於傳統的關系型資料庫,其數據在表中是按行存儲的,列方式所帶來的重要好處之一就是,由於查詢中的選擇規則是通過列來定義的,因此整個資料庫是自動索引化的。按列存儲每個欄位的數據聚集存儲,在查詢只需要少數幾個欄位的時候,能大大減少讀取的數據量,一個欄位的數據聚集存儲,那就更容易為這種聚集存儲設計更好的壓縮/解壓演算法。
傳統的(Oracle)行存儲和(Hbase)列存儲的區別
這里寫圖片描a
1、數據是按行存儲的
2、沒有索引的查詢使用大量I/O
3、建立索引和物化視圖需要花費大量時間和資源
4、面對查詢的需求,資料庫必須被大量膨脹才能滿足性能需求
這里寫圖片描述
1、數據按列存儲–每一列單獨存放
2、數據即是索引
3、只訪問查詢涉及的列–大量降低系統IO
4、每一列由一個線索來處理–查詢的並發處理
5、數據類型一致,數據特徵相似–高效壓縮