1. 程式人生 > 其它 >NoSql資料庫

NoSql資料庫

隨著網際網路web2.0網站的興起,非關係型的資料庫現在成了一個極其熱門的新領域,非關係資料庫產品的發展非常迅速。而傳統的關係資料庫在應付web2.0網站,特別是超大規模和高併發的SNS型別的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,如:對資料庫高併發讀寫的需求、對海量資料的高效率儲存和訪問的需求、對資料庫的高可擴充套件性和高可用性的需求等等,下面我就跟大家幾種常見的nosql資料庫。

1、MongoDB

介紹

MongoDB是一個基於分散式檔案儲存的資料庫。由C++語言編寫。主要解決的是海量資料的訪問效率問題,為WEB應用提供可擴充套件的高效能資料儲存解決方案。當資料量達到50GB以上的時候,MongoDB的資料庫訪問速度是MySQL的10倍以上。MongoDB的併發讀寫效率不是特別出色,根據官方提供的效能測試表明,大約每秒可以處理0.5萬~1.5萬次讀寫請求。MongoDB還自帶了一個出色的分散式檔案系統GridFS,可以支援海量的資料儲存。

MongoDB也有一個Ruby的專案MongoMapper,是模仿Merb的DataMapper編寫的MongoDB介面,使用起來非常簡單,幾乎和DataMapper一模一樣,功能非常強大。

MongoDB是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。他支援的資料結構非常鬆散,是類似json的bjson格式,因此可以儲存比較複雜的資料型別。Mongo最大的特點是他支援的查詢語言非常強大,其語法有點類似於面向物件的查詢語言,幾乎可以實現類似關係資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。

所謂“面向集合”(Collenction-Orented),意思是資料被分組儲存在資料集中,被稱為一個集合(Collenction)。每個 集合在資料庫中都有一個唯一的標識名,並且可以包含無限數目的文件。集合的概念類似關係型資料庫(RDBMS)裡的表(table),不同的是它不需要定 義任何模式(schema)。

模式自由(schema-free),意味著對於儲存在mongodb資料庫中的檔案,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的檔案儲存在同一個資料庫裡。

儲存在集合中的文件,被儲存為鍵-值對的形式。鍵用於唯一標識一個文件,為字串型別,而值則可以是各中複雜的檔案型別。我們稱這種儲存形式為BSON(Binary Serialized dOcument Format)。

MongoDB服務端可執行在Linux、Windows或OS X平臺,支援32位和64位應用,預設埠為27017。推薦執行在64位平臺,因為MongoDB在32位模式執行時支援的最大檔案尺寸為2GB。

MongoDB把資料儲存在檔案中(預設路徑為:/data/db),為提高效率使用記憶體對映檔案進行管理。

特性

它的特點是高效能、易部署、易使用,儲存資料非常方便。主要功能特性有:

面向集合儲存,易儲存物件型別的資料。

模式自由。

支援動態查詢。

支援完全索引,包含內部物件。

支援查詢。

支援複製和故障恢復。

使用高效的二進位制資料儲存,包括大型物件(如視訊等)。

自動處理碎片,以支援雲端計算層次的擴充套件性。

支援RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。

檔案儲存格式為BSON(一種JSON的擴充套件)。

可通過網路訪問。

官方網站

2、CouchDB

介紹

Apache CouchDB 是一個面向文件的資料庫管理系統。它提供以 JSON 作為資料格式的 REST 介面來對其進行操作,並可以通過檢視來操縱文件的組織和呈現。 CouchDB 是 Apache 基金會的頂級開源專案。

CouchDB是用Erlang開發的面向文件的資料庫系統,其資料儲存方式類似Lucene的Index檔案格式。CouchDB最大的意義在於它是一個面向Web應用的新一代儲存系統,事實上,CouchDB的口號就是:下一代的Web應用儲存系統。

特性

主要功能特性有:

CouchDB是分散式的資料庫,他可以把儲存系統分佈到n臺物理的節點上面,並且很好的協調和同步節點之間的資料讀寫一致性。這當然也得以於Erlang無與倫比的併發特性才能做到。對於基於web的大規模應用文件應用,然的分散式可以讓它不必像傳統的關係資料庫那樣分庫拆表,在應用程式碼層進行大量的改動。

CouchDB是面向文件的資料庫,儲存半結構化的資料,比較類似lucene的index結構,特別適合儲存文件,因此很適合CMS,電話本,地址本等應用,在這些應用場合,文件資料庫要比關係資料庫更加方便,效能更好。

CouchDB支援REST API,可以讓使用者使用JavaScript來操作CouchDB資料庫,也可以用JavaScript編寫查詢語句,我們可以想像一下,用AJAX技術結合CouchDB開發出來的CMS系統會是多麼的簡單和方便。其實CouchDB只是Erlang應用的冰山一角,在最近幾年,基於Erlang的應用也得到的蓬勃的發展,特別是在基於web的大規模,分散式應用領域,幾乎都是Erlang的優勢專案。

官方網站

3、Hbase

介紹

HBase是一個分散式的、面向列的開源資料庫,該技術來源於Chang et al所撰寫的Google論文“Bigtable:一個結構化資料的分散式儲存系統”。就像Bigtable利用了Google檔案系統(File System)所提供的分散式資料儲存一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop專案的買QQ靚號地圖子專案。HBase不同於一般的關係資料庫,它是一個適合於非結構化資料儲存的資料庫.另一個不同的是HBase基於列的而不是基於行的模式。

HBase – Hadoop Database,是一個高可靠性、高效能、面向列、可伸縮的分散式儲存系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化儲存叢集。 HBase是Google Bigtable的開源實現,類似Google Bigtable利用GFS作為其檔案儲存系統,HBase利用Hadoop HDFS作為其檔案儲存系統;Google執行MapReduce來處理Bigtable中的海量資料,HBase同樣利用Hadoop MapReduce來處理HBase中的海量資料;Google Bigtable利用 Chubby作為協同服務,HBase利用Zookeeper作為對應。

HBase訪問介面

Native Java API,最常規和高效的訪問方式,適合Hadoop MapReduce Job並行批處理HBase表資料

HBase Shell,HBase的命令列工具,最簡單的介面,適合HBase管理使用

Thrift Gateway,利用Thrift序列化技術,支援C++,PHP,Python等多種語言,適合其他異構系統線上訪問HBase表資料

REST Gateway,支援REST 風格的Http API訪問HBase, 解除了語言限制

Pig,可以使用Pig Latin流式程式語言來操作HBase中的資料,和Hive類似,本質最終也是編譯成MapReduce Job來處理HBase表資料,適合做資料統計

Hive,當前Hive的Release版本尚沒有加入對HBase的支援,但在下一個版本Hive 0.7.0中將會支援HBase,可以使用類似SQL語言來訪問HBase

特徵

主要功能特性有:

支援數十億行X上百萬列

採用分散式架構 Map/reduce

對實時查詢進行優化

高效能 Thrift閘道器

通過在server端掃描及過濾實現對查詢操作預判

支援 XML, Protobuf, 和binary的HTTP

基於 Jruby( JIRB)的shell

對配置改變和較小的升級都會重新回滾

不會出現單點故障

堪比MySQL的隨機訪問效能

官方網站

4、cassandra

介紹

Cassandra是一個混合型的非關係的資料庫,類似於Google的BigTable。其主要功能比Dynomite(分散式的Key-Value儲存系統)更豐富,但支援度卻不如文件儲存MongoDB(介於關係資料庫和非關係資料庫之間的開源產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。支援的資料結構非常鬆散,是類似json的bjson格式,因此可以儲存比較複雜的資料型別。)Cassandra最初由Facebook開發,後轉變成了開源專案。它是一個網路社交雲端計算方面理想的資料庫。以Amazon專有的完全分散式的Dynamo為基礎,結合了Google BigTable基於列族(Column Family)的資料模型。P2P去中心化的儲存。很多方面都可以稱之為Dynamo 2.0。

特性

和其他資料庫比較,有幾個突出特點:

模式靈活 :使用Cassandra,像文件儲存,你不必提前解決記錄中的欄位。你可以在系統執行時隨意的新增或移除欄位。這是一個驚人的效率提升,特別是在大型部 署上。

真正的可擴充套件性 :Cassandra是純粹意義上的水平擴充套件。為給叢集新增更多容量,可以指向另一臺電腦。你不必重啟任何程序,改變應用查詢,或手動遷移任何資料。

多資料中心識別 :你可以調整你的節點佈局來避免某一個數據中心起火,一個備用的資料中心將至少有每條記錄的完全複製。

一些使Cassandra提高競爭力的其他功能:

範圍查詢 :如果你不喜歡全部的鍵值查詢,則可以設定鍵的範圍來查詢。

列表資料結構 :在混合模式可以將超級列新增到5維。對於每個使用者的索引,這是非常方便的。

分散式寫操作 :有可以在任何地方任何時間集中讀或寫任何資料。並且不會有任何單點失敗。

官方網站

5、Hypertable

介紹

Hypertable是一個開源、高效能、可伸縮的資料庫,它採用與Google的Bigtable相似的模型。在過去數年中,Google為在 PC叢集 上執行的可伸縮計算基礎設施設計建造了三個關鍵部分。第一個關鍵的基礎設施是Google File System(GFS),這是一個高可用的檔案系統,提供了一個全域性的名稱空間。它通過跨機器(和跨機架)的檔案資料複製來達到高可用性,並因此免受傳統 檔案儲存系統無法避免的許多失敗的影響,比如電源、記憶體和網路埠等失敗。第二個基礎設施是名為Map-Reduce的計算框架,它與GFS緊密協作,幫 助處理收集到的海量資料。第三個基礎設施是Bigtable,它是傳統資料庫的替代。Bigtable讓你可以通過一些主鍵來組織海量資料,並實現高效的 查詢。Hypertable是Bigtable的一個開源實現,並且根據我們的想法進行了一些改進。

特性

主要功能特點:

負載均衡的處理

版本控制和一致性

可靠性

分佈為多個節點