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 & 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>