天天看點

hbase實戰——(1.1 nosql介紹)什麼是nosql為什麼使用nosql現在流行的nosqlHBase是什麼為什麼采用HBaseHBase的存儲結構HBase與關系型資料庫的對比

NoSQL(NoSQL = Not Only SQL),意思是不僅僅是SQL的擴充,一般指的是非關系型的資料庫。

随着網際網路web2.0網站的興起,傳統的關系資料庫在應付web2.0網站,特别是超大規模和高并發的SNS類型的web2.0純動态網站已經顯得力不從心,傳統的電信行業動辍就千萬甚至上億的資料,甚至有客戶提出需要存儲相關的日志資料50年以上,暴露了很多難以克服的問題,而非關系型的資料庫則由于其本身的特點得到了非常迅速的發展。

關系型資料庫難以克服的問題:

不能很好處理對資料庫高并發讀寫的需求

不能很好處理對海量資料的高效率存儲和通路的需求

不能很好處理對資料庫的高可擴充性和高可用性的需求

SQL語言和關系型資料庫(MySQL、PostgreSQL、Oracle等)是通用的資料解決方案,占有絕大多數的市場。但是就像上面提到的,它有很多難以解決的問題。不過在最近興起的NoSQL運動中,湧現出一批具備高可用性、支援線性擴充、支援Map/Reduce操作等特性的資料産品,它們具有如下特性:

頻繁的寫入操作、相對較少的讀取統計資訊的操作

海量資料(如資料倉庫中需要分析的資料)适合存儲在一個結構松散、分布式的檔案存儲系統中

存儲二進制檔案(如mp3或者pdf文檔)并且能夠直接為使用者的浏覽器提供下載下傳功能

使用這些資料産品并不是要取代原有的資料産品,而是為不同的應用場景提供更多的選擇。也就是說,在一些特定的情況下如果是關系型的資料庫解決不了的問題,那麼就可以考慮使用nosql,而不是說完全将應用移植到nosql上,畢竟适合才是最好的。

下面對現在的nosql進行了整理,其中包括各種nosql的官方網站。

<a href="http://www.cnblogs.com/skyme/archive/2012/07/26/2609835.html">15個nosql資料庫</a>

HBase是Apache Hadoop中的一個子項目,Hbase依托于Hadoop的HDFS作為最基本存儲基礎單元,通過使用hadoop的DFS工具就可以看到這些這些資料 存儲檔案夾的結構,還可以通過Map/Reduce的架構(算法)對HBase進行操作,如下圖所示:

HBase在産品中還包含了Jetty,在HBase啟動時采用嵌入式的方式來啟動Jetty,是以可以通過web界面對HBase進行管理和檢視目前運作的一些狀态,非常輕巧友善。

HBase是Apache Hadoop中的一個子項目,現已成為Apache的頂級項目。

HBase是Google Bigtable(基于Google File System)的開源山寨版本。

HBase 不同于一般的關系資料庫,它是一個适合于非結構化資料存儲的資料庫.所謂非結構化資料存儲就是說HBase是基于列的而不是基于行的模式,這樣友善讀寫你的大資料内容。

HBase是介于Map Entry(key &amp; value)和DB Row之間的一種資料存儲方式。就點有點類似于現在流行的Memcache,但不僅僅是簡單的一個key對應一個 value,你很可能需要存儲多個屬性的資料結構,但沒有傳統資料庫表中那麼多的關聯關系,這就是所謂的松散資料。

簡單來說,你在HBase中的表建立的可以看做是一張很大的表,而這個表的屬性可以根據需求去動态增加,在HBase中沒有表與表之間關聯查詢。你隻需要 告訴你的資料存儲到Hbase的那個column families 就可以了,不需要指定它的具體類型:char,varchar,int,tinyint,text等等。但是你需要注意HBase中不包含事務此類的功能。

Apache HBase 和Google Bigtable 有非常相似的地方,一個資料行擁有一個可選擇的鍵和任意數量的列。表是疏松的存儲的,是以使用者可以給行定義各種不同的列,對于這樣的功能在大項目中非常實用,可以簡化設計和更新的成本。

HBase 是基于列的資料庫,讓我們看一下關系型資料庫和hbase資料庫存儲的對比。

行式存儲和列式存儲對比:

行式存儲

資料是按行存儲的

沒有索引的查詢使用大量I/O

建立索引和物化視圖需要花費大量時間和資源

面對查詢的需求,資料庫必須被大量膨脹才能滿足性能要求

列式存儲

資料按列存儲——每一列單獨存放

資料即是索引

隻通路查涉及的列——大量降低系統IO

每一列由一個線索來處理——查詢的并發處理

資料類型一緻,資料特征相似——高效壓縮

HBase 是基于

下面的表格中hbase和RDBMS的對比關系

HBase

RDBMS

資料類型

隻有字元串

豐富的資料類型

資料操作

簡單的增删改查

各種各樣的函數,表連接配接

存儲模式

基于列存儲

基于表格結構和行存儲

資料保護

更新後舊版本仍然會保留

替換

可伸縮性

輕易的進行增加節點,相容性高

需要中間層,犧牲功能

hadoop使用:

<a href="http://www.cnblogs.com/skyme/archive/2011/10/26/2223984.html">hadoop使用(一)</a>

<a href="http://www.cnblogs.com/skyme/archive/2011/10/27/2225202.html">hadoop使用(二)</a>

<a href="http://www.cnblogs.com/skyme/archive/2011/10/28/2226850.html">hadoop使用(三)</a>

<a href="http://www.cnblogs.com/skyme/archive/2012/07/29/2227507.html">hadoop使用(四)</a>

<a href="http://www.cnblogs.com/skyme/archive/2012/06/01/2529855.html">hadoop使用(五)</a>

<a href="http://www.cnblogs.com/skyme/archive/2012/06/04/2534876.html">hadoop使用(六)</a>

hbase實戰:

<a href="http://www.cnblogs.com/skyme/archive/2012/07/25/2608310.html">hbase實戰——(1.1  nosql介紹)</a>