12個最好的免費和開源的NoSQL數據庫
MongoDB是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bjson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。
它的特點是高性能、易部署、易使用,存儲數據非常方便。主要功能特性有:
- 面向集合存儲,易存儲對象類型的數據。
- 模式自由。
- 支持動態查詢。
- 支持完全索引,包含內部對象。
- 支持查詢。
- 支持復制和故障恢復。
- 使用高效的二進制數據存儲,包括大型對象(如視頻等)。
- 自動處理碎片,以支持云計算層次的擴展性
- 支持RUBY,PYTHON,JAVA,C++,PHP等多種語言。
- 文件存儲格式為BSON(一種JSON的擴展)
- 可通過網絡訪問
所謂“面向集合”(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),為提高效率使用內存映射文件進行管理。
- 分布式
- 基于column的結構化
- 高伸展性
Cassandra的主要特點就是它不是一個數據庫,而是由一堆數據庫節點共同構成的一個分布式網絡服務,對Cassandra 的一個寫操作,會被復制到其他節點上去,對Cassandra的讀操作,也會被路由到某個節點上面去讀取。對于一個Cassandra群集來說,擴展性能 是比較簡單的事情,只管在群集里面添加節點就可以了。
Cassandra是一個混合型的非關系的數據庫,類似于Google的BigTable。其主要功能比 Dynomite(分布式的Key-Value存 儲系統)更豐富,但支持度卻不如文檔存儲MongoDB(介于關系數據庫和非關系數據庫之間的開源產品,是非關系數據庫當中功能最豐富,最像關系數據庫 的。支持的數據結構非常松散,是類似json的bjson格式,因此可以存儲比較復雜的數據類型。)Cassandra最初由非死book開發,后轉變成了開源項目。它是一個網絡社交云計算方面理想的數據庫。以Amazon專有的完全分布式的Dynamo為基礎,結合了Google BigTable基于列族(Column Family)的數據模型。P2P去中心化的存儲。很多方面都可以稱之為Dynamo 2.0。
和其他數據庫比較,有幾個突出特點:
模式靈活 :使用Cassandra,像文檔存儲,你不必提前解決記錄中的字段。你可以在系統運行時隨意的添加或移除字段。這是一個驚人的效率提升,特別是在大型部 署上。
真正的可擴展性 :Cassandra是純粹意義上的水平擴展。為給集群添加更多容量,可以指向另一臺電腦。你不必重啟任何進程,改變應用查詢,或手動遷移任何數據。
多數據中心識別 :你可以調整你的節點布局來避免某一個數據中心起火,一個備用的數據中心將至少有每條記錄的完全復制。
一些使Cassandra提高競爭力的其他功能:
范圍查詢 :如果你不喜歡全部的鍵值查詢,則可以設置鍵的范圍來查詢。
列表數據結構 :在混合模式可以將超級列添加到5維。對于每個用戶的索引,這是非常方便的。
分布式寫操作 :有可以在任何地方任何時間集中讀或寫任何數據。并且不會有任何單點失敗。
Apache CouchDB 是一個面向文檔的數據庫管理系統。它提供以 JSON 作為數據格式的 REST 接口來對其進行操作,并可以通過視圖來操縱文檔的組織和呈現。 CouchDB 是 Apache 基金會的頂級開源項目。
CouchDB落實到最底層的數據結構就是兩類B+Tree 。
與現在流行的關系數據庫服務器不同,CouchDB 是圍繞一系列語義上自包含的文檔而組織的。 CouchDB 中的文檔是沒有模式的(schema free),也就是說并不要求文檔具有某種特定的結構。 CouchDB 的這種特性使得相對于傳統的關系數據庫而言,有自己的適用范圍。一般來說,圍繞文檔來構建的應用都比較適合使用 CouchDB 作為其后臺存儲。 CouchDB 強調其中所存儲的文檔,在語義上是自包含的。這種面向文檔的設計思路,更貼近很多應用的問題域的真實情況。對于這類應用,使用 CouchDB 的文檔來進行建模,會更加自然和簡單。與此同時,CouchDB 也提供基于 MapReduce 編程模型的視圖來對文檔進行查詢,可以提供類似于關系數據庫中 SQL 語句的能力。 CouchDB 對于很多應用來說,提供了關系數據庫之外的更好的選擇。
Hypertable 是一個正在進行中的開源項目,以google的bigtable論文為基礎指導,使用c++語言實現。
目標:
- 是為了解決大并發,大數據量的數據庫需求。
- 目前只支持最基本的查詢功能
缺點:
- 不支持事物, 不支持關聯查詢.
- 對單條查詢的響應時間可能也不如傳統數據庫(要看數據量,量越大,對hypertable越有 力)。
優點:
- 并發性: 可以處理大量并發請求,和管理大量數據。
- 規模:可擴縮性好,擴容只需要增加集群中的機器就ok了。
- 可用性: 任何節點失效,既不會造成系統癱瘓也不會丟失數 據。在集群節點足夠的情況下,并發量和數據量對性能基本沒有影響。

Redis是一種高級key-value數據庫。它跟memcached類似,不過數據可以持久化,而且支持的數據類型很豐富。有字符串,鏈表,集 合和有序集合。支持在服務器端計算集合的并,交和補集(difference)等,還支持多種排序功能。所以Redis也可以被看成是一個數據結構服務 器。
Redis的所有數據都是保存在內存中,然后不定期的通過異步方式保存到磁盤上(這稱為“半持久化模式”);也可以把每一次數據變化都寫入到一個append only file(aof)里面(這稱為“全持久化模式”)。
Riak 是一個去中心化的 key-value 存儲服務器,提供一個靈活的 map/reduce 引擎,一個友好的 HTTP/JSON 查詢接口。
該項目剛剛發布了1.0版 - 關于伸縮性和社區測試的一個主要里程碑。通過聯機備份實現的高可用性和主從復制目前處于測試階段,預計在下一版本中發布。Neo4j既可作為無需任何管理開銷的內嵌數據庫使用;也可以作為單獨的服務器使用,在這種使用場景下,它提供了廣泛使用的REST接口,能夠方便地集成到基于PHP、.NET和JavaScript的環境里。但本文的重點主要在于討論Neo4j的直接使用。
開發者可以通過Java-API直接與圖形模型交互,這個API暴露了非常靈活的數據結構。至于象JRuby/Ruby、Scala、Python、Clojure等其他語言,社區也貢獻了優秀的綁定庫。Neo4j的典型數據特征:
- 數據結構不是必須的,甚至可以完全沒有,這可以簡化模式變更和延遲數據遷移。
- 可以方便建模常見的復雜領域數據集,如CMS里的訪問控制可被建模成細粒度的訪問控制表,類對象數據庫的用例、TripleStores以及其他例子。
- 典型使用的領域如語義網和RDF、LinkedData、GIS、基因分析、社交網絡數據建模、深度推薦算法以及其他領域。
甚至“傳統”RDBMS應用往往也會包含一些具有挑戰性、非常適合用圖來處理的數據集,如文件夾結構、產品配置、產品組裝和分類、媒體元數據、金融領域的語義交易和欺詐檢測等。
圍繞內核,Neo4j提供了一組可選的組件。其中有支持通過元模型構造圖形結構、SAIL - 一種SparQL兼容的RDF TripleStore實現或一組公共圖形算法的實現。
要是你想將Neo4j作為單獨的服務器運行,還可以找到REST包裝器。這非常適合使用LAMP軟件搭建的架構。通過memcached、e-tag和基于Apache的緩存和Web層,REST甚至簡化了大規模讀負荷的伸縮。

Couchbase Server 是一個集群化的、基于文檔的數據庫系統,它使用一個緩存層來提供非常快的數據訪問,將大部分數據都存儲在 RAM 中。該系統使用多個節點和一個自動分散在整個集群上的緩存層。這實現了一種彈性,您可擴大和緊縮集群,以便利用更多 RAM 或磁盤 I/O 來幫助提升性能。
Couchbase Server 中的所有數據最終會持久存儲在磁盤中,但最初會通過緩存層執行寫入和更新操作,這正是提供高性能的源泉,是我們通過處理 Hadoop 數據來獲得實時信息和查詢內容時可利用的優勢。
Couchbase Server 的基本形式是一個基本文檔和基于鍵/值的存儲。只有在您知道文檔 ID 時,才能檢索集群提供的信息。在 Couchbase Server 2.0 中,您可以將文檔存儲為 JSON 格式,然后使用視圖系統在存儲的 JSON 文檔上創建一個視圖。視圖是在存儲在數據庫中的文檔上執行的一個 MapReduce 組合。來自視圖的輸出是一個索引,它通過 MapReduce 函數來匹配您定義的結構。索引的存在為您提供了查詢底層的文檔數據的能力。
memcachedb是 一個由新浪網的開發人員開放出來的開源項目,給memcached分布式緩存服務器添加了Berkeley DB的持久化存儲機制和異步主輔復制機制,讓memcached具備了事務恢復能力、持久化能力和分布式復制能力,非常適合于需要超高性能讀寫速度,但是 不需要嚴格事務約束,能夠被持久化保存的應用場景,例如memcachedb被應用在新浪博客上面。
1.支持自動復制數據到多個服務器上。
2.支持數據自動分割所以每個服務器只包含總數據的一個子集。
3.提供服務器故障透明處理功能。
4.支持可撥插的序化支持,以實現復雜的鍵-值存儲,它能夠很好的5.集成常用的序化框架如:Protocol Buffers、Thrift、Avro和Java Serialization。
6.數據項都被標識版本能夠在發生故障時盡量保持數據的完整性而不會影響系統的可用性。
7.每個節點相互獨立,互不影響。
8.支持可插拔的數據放置策略。