隨着互聯網web2.0網站的興起,非關係型的數據庫如今成了一個極其熱門的新領域,非關係數據庫產品的發展很是迅速。而傳統的關係數據庫在應付web2.0網站,特別是超大規模和高併發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了不少難以克服的問題,如:對數據庫高併發讀寫的需求、對海量數據的高效率存儲和訪問的需求、對數據庫的高可擴展性和高可用性的需求等等,下面我就跟你們幾種常見的nosql數據庫。web
一、MongoDBsql
介紹mongodb
MongoDB是一個基於分佈式文件存儲的數據庫。由C++語言編寫。主要解決的是海量數據的訪問效率問題,爲WEB應用提供可擴展的高性能數據存儲解決方案。當數據量達到50GB以上的時候,MongoDB的數據庫訪問速度是MySQL的10倍以上。MongoDB的併發讀寫效率不是特別出色,根據官方提供的性能測試代表,大約每秒能夠處理0.5萬~1.5萬次讀寫請求。MongoDB還自帶了一個出色的分佈式文件系統GridFS,能夠支持海量的數據存儲。shell
MongoDB也有一個Ruby的項目MongoMapper,是模仿Merb的DataMapper編寫的MongoDB接口,使用起來很是簡單,幾乎和DataMapper如出一轍,功能很是強大。數據庫
MongoDB是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。他支持的數據結構很是鬆散,是相似json的bjson格式,所以能夠存儲比較複雜的數據類型。Mongo最大的特色是他支持的查詢語言很是強大,其語法有點相似於面向對象的查詢語言,幾乎能夠實現相似關係數據庫單表查詢的絕大部分功能,並且還支持對數據創建索引。apache
所謂「面向集合」(Collenction-Orented),意思是數據被分組存儲在數據集中,被稱爲一個集合(Collenction)。每一個 集合在數據庫中都有一個惟一的標識名,而且能夠包含無限數目的文檔。集合的概念相似關係型數據庫(RDBMS)裏的表(table),不一樣的是它不須要定 義任何模式(schema)。編程
模式自由(schema-free),意味着對於存儲在mongodb數據庫中的文件,咱們不須要知道它的任何結構定義。若是須要的話,你徹底能夠把不一樣結構的文件存儲在同一個數據庫裏。json
存儲在集合中的文檔,被存儲爲鍵-值對的形式。鍵用於惟一標識一個文檔,爲字符串類型,而值則能夠是各中複雜的文件類型。咱們稱這種存儲形式爲BSON(Binary Serialized dOcument Format)。ruby
MongoDB服務端可運行在Linux、Windows或OS X平臺,支持32位和64位應用,默認端口爲27017。推薦運行在64位平臺,由於MongoDB在32位模式運行時支持的最大文件尺寸爲2GB。網絡
MongoDB把數據存儲在文件中(默認路徑爲:/data/db),爲提升效率使用內存映射文件進行管理。
特性
它的特色是高性能、易部署、易使用,存儲數據很是方便。主要功能特性有:
面向集合存儲,易存儲對象類型的數據。
模式自由。
支持動態查詢。
支持徹底索引,包含內部對象。
支持查詢。
支持複製和故障恢復。
使用高效的二進制數據存儲,包括大型對象(如視頻等)。
自動處理碎片,以支持雲計算層次的擴展性。
支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
文件存儲格式爲BSON(一種JSON的擴展)。
可經過網絡訪問。
官方網站
二、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的優點項目。
官方網站
三、Hbase
介紹
HBase是一個分佈式的、面向列的開源數據庫,該技術來源於Chang et al所撰寫的Google論文「Bigtable:一個結構化數據的分佈式存儲系統」。就像Bigtable利用了Google文件系統(File System)所提供的分佈式數據存儲同樣,HBase在Hadoop之上提供了相似於Bigtable的能力。HBase是Apache的Hadoop項目的子項目。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的隨機訪問性能
官方網站
四、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維。對於每一個用戶的索引,這是很是方便的。
分佈式寫操做 :有能夠在任何地方任什麼時候間集中讀或寫任何數據。而且不會有任何單點失敗。
官方網站
五、Hypertable
介紹
Hypertable是一個開源、高性能、可伸縮的數據庫,它採用與Google的Bigtable類似的模型。在過去數年中,Google爲在 PC集羣 上運行的可伸縮計算基礎設施設計建造了三個關鍵部分。第一個關鍵的基礎設施是Google File System(GFS),這是一個高可用的文件系統,提供了一個全局的命名空間。它經過跨機器(和跨機架)的文件數據複製來達到高可用性,並所以免受傳統 文件存儲系統沒法避免的許多失敗的影響,好比電源、內存和網絡端口等失敗。第二個基礎設施是名爲Map-Reduce的計算框架,它與GFS緊密協做,幫 助處理收集到的海量數據。第三個基礎設施是Bigtable,它是傳統數據庫的替代。Bigtable讓你能夠經過一些主鍵來組織海量數據,並實現高效的 查詢。Hypertable是Bigtable的一個開源實現,而且根據咱們的想法進行了一些改進。
特性
主要功能特色:
負載均衡的處理
版本控制和一致性
可靠性
分佈爲多個節點
官方網站
好啦,今天的分享到這裏就結束了,但願你們可以持續關注馬哥