自1970年以來,關聯式資料庫用於資料儲存和維護有關問題的解決方案。巨量資料的出現後,好多公司實現處理巨量資料並從中受益,並開始選擇像 Hadoop 的解決方案。
Hadoop使用分散式檔案系統,用於儲存巨量資料,並使用MapReduce來處理。Hadoop擅長於儲存各種格式的龐大的資料,任意的格式甚至非結構化的處理。
Hadoop只能執行批次處理,並且只以順序方式存取資料。這意味著必須搜尋整個資料集,即使是最簡單的搜尋工作。
當處理結果在另一個龐大的資料集,也是按順序處理一個巨大的資料集。在這一點上,一個新的解決方案,需要存取資料中的任何點(隨機存取)單元。
應用程式,如HBase, Cassandra, couchDB, Dynamo 和 MongoDB 都是一些儲存大量資料和以隨機方式存取資料的資料庫。
HBase是建立在Hadoop檔案系統之上的分散式面向列的資料庫。它是一個開源專案,是橫向擴充套件的。
HBase是一個資料模型,類似於谷歌的大錶設計,可以提供快速隨機存取海量結構化資料。它利用了Hadoop的檔案系統(HDFS)提供的容錯能力。
它是Hadoop的生態系統,提供對資料的隨機實時讀/寫存取,是Hadoop檔案系統的一部分。
人們可以直接或通過HBase的儲存HDFS資料。使用HBase在HDFS讀取消費/隨機存取資料。 HBase在Hadoop的檔案系統之上,並提供了讀寫存取。
HDFS | HBase |
---|---|
HDFS是適於儲存大容量檔案的分散式檔案系統。 | HBase是建立在HDFS之上的資料庫。 |
HDFS不支援快速單獨記錄查詢。 | HBase提供在較大的表快速查詢 |
它提供了高延遲批次處理;沒有批次處理概念。 | 它提供了數十億條記錄低延遲存取單個行記錄(隨機存取)。 |
它提供的資料只能順序存取。 | HBase內部使用雜湊表和提供隨機接入,並且其儲存索引,可將在HDFS檔案中的資料進行快速查詢。 |
HBase是一個面向列的資料庫,在表中它由行排序。表模式定義只能列族,也就是鍵值對。一個表有多個列族以及每一個列族可以有任意數量的列。後續列的值連續地儲存在磁碟上。表中的每個單元格值都具有時間戳。總之,在一個HBase:
下面給出的表中是HBase模式的一個例子。
Rowide | Column Family | Column Family | Column Family | Column Family | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
col1 | col2 | col3 | col1 | col2 | col3 | col1 | col2 | col3 | col1 | col2 | col3 | |
1 | ||||||||||||
2 | ||||||||||||
3 |
面向列的資料庫是儲存資料表作為資料列的部分,而不是作為行資料。總之它們擁有列族。
行式資料庫 | 列式資料庫 |
---|---|
它適用於聯機事務處理(OLTP)。 | 它適用於線上分析處理(OLAP)。 |
這樣的資料庫被設計為小數目的行和列。 | 面向列的資料庫設計的巨大表。 |
下圖顯示了列族在面向列的資料庫:
HBase | RDBMS |
---|---|
HBase無模式,它不具有固定列模式的概念;僅定義列族。 | RDBMS有它的模式,描述表的整體結構的約束。 |
它專門建立為寬表。 HBase是橫向擴充套件。 | 這些都是細而專為小表。很難形成規模。 |
沒有任何事務存在於HBase。 | RDBMS是事務性的。 |
它反規範化的資料。 | 它具有規範化的資料。 |
它用於半結構以及結構化資料是非常好的。 | 用於結構化資料非常好。 |
年份 | 事件 |
---|---|
Nov 2006 | 谷歌公布 BigTable 檔案。 |
Feb 2007 | 最初的HBase原型建立由 Hadoop 貢獻。 |
Oct 2007 | 隨著Hadoop 0.15.0,第一個可用的HBase也發布了。 |
Jan 2008 | HBase成為 Hadoop 的子專案。 |
Oct 2008 | HBase 0.18.1 發布。 |
Jan 2009 | HBase 0.19 發布。 |
Sept 2009 | HBase 0.20.0 發布。 |
May 2010 | HBase 成為 Apache 的頂級專案。 |