盤點2013:21款最優秀的開源資料庫

csdn發表於2013-12-31

  作為一名軟體開發人員或DBA,其中一份必不可少的工作就是與資料庫打交道,比如MS SQL伺服器、MySQL、Oracle、PostgreSQL、MongoDB等等。眾所周知,其中MySQL是目前使用最廣泛最好的免費開源資料庫,此外,還有一些你不知道或者沒用過但又非常出色的開源資料庫,例如 PostgreSQL、 MongoDB、HBase、Cassandra、Couchbase、Neo4j、Riak、Redis、Firebird 等。

  在本文,作者總共總結了21個最優秀的開源資料庫,不妨讓我們一起來看下吧。

  1.MySQL

  MySQL是一個開源的關係型資料庫管理系統,為甲骨文公司產品。支援多種儲存引擎、叢集、全文索引、支援多執行緒、充分利用CPU資源、支援多使用者等其它許多非常專業的功能。

  MySQL由於效能高、成本低、可靠性好已經成為最流行的開源資料庫,並且被廣泛應用在Web應用程式以及其它中小型專案上。從WordPress 到Movable Type都把MySQL作為預設的資料庫。此外,自甲骨文收購MySQL以後,有將MySQL閉源的潛在風險,因此社群採用分支的方式避開這種風險,開發並運營著完全相容MySQL的MariaDB資料庫。

  2.PostgreSQL

  PostgreSQL可以簡稱為“postgres”,是一款物件-關係型資料庫管理系統,PostgreSQL採用的是比較經典的C/S(client/server)結構,也就是一個客戶端對應一個伺服器端守護程式的模式。PostgreSQL擁有非常完美的驅動,並支援標準的ANSI-SQL和擴充套件功能,在許多方面都要超過MySQL。

  PostgreSQL是全功能的自由軟體資料庫,很長時間以來,PostgreSQL是唯一支援事務、子查詢、多版本並行控制系統(MVCC)、資料完整性檢查等特性的唯一一種自由軟體的資料庫管理系統。許多雲服務提供商比如Heroku等,都用PostgreSQL作為他們的RDBMS儲存。

  缺點方面,PostgreSQL還欠缺一些比較高階的資料庫管理系統需要的特性,比如資料庫叢集,更優良的管理工具和更加自動化的系統優化功能等提高資料庫效能的機制等。

  3.MongoDB

  MongoDB是一款開源、面向文件並且也是當下人氣最旺的NoSQL資料庫,它也是一款介於關聯式資料庫和非關聯式資料庫之間的產品。Mongo最大的特點是它支援的查詢語言非常強大,其語法有點類似於物件導向的查詢語言,幾乎可以實現類似關聯式資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。還具有高效能、易部署、易使用,儲存資料非常方便等特點。

  4.Hadoop (HBase)

  Hadoop (HBase)是一個開源的、基於列儲存模型的分散式資料庫,它是Apache Hadoop專案的一部分,開發語言為Java。

  HBase不同於一般的關聯式資料庫,它是一個適合於非結構化資料儲存的資料庫。另一個不同的是HBase基於列的而不是基於行的模式。且具有高可靠性、高效能、可伸縮、並建立在關係模型基礎上的分散式資料庫。

  HBase是Google Bigtable的開源實現,類似Google Bigtable利用GFS作為其檔案儲存系統,用以儲存大規模結構化資料。HBase利用Hadoop HDFS作為其檔案儲存系統;Google執行MapReduce來處理Bigtable中的海量資料,HBase同樣利用Hadoop MapReduce來處理HBase中的海量資料;Google Bigtable利用 Chubby作為協同服務,HBase利用Zookeeper作為對應。

  5.Apache Cassandra

  Apache Cassandra是一套開源分散式NoSQL資料庫系統,類似於Google的BigTable。它最初由Facebook開發,用於儲存收件箱等簡單格式資料,集Google BigTable的資料模型與Amazon Dynamo的完全分散式的架構於一身。在2008年,Facebook將其開源。

  Cassandra的主要特點就是它不是一個資料庫,而是由一堆資料庫節點共同構成的一個分散式網路服務,對Cassandra 的一個寫操作,會被複制到其它節點上去,對Cassandra的讀操作,也會被路由到某個節點上面去讀取。對於一個Cassandra群集來說,擴充套件效能是比較簡單的事情,只管在群集裡面新增節點就可以了。

  6.Couchbase

  Couchbase是一款基於JSON模型的文件資料庫,它是CouchDB的一個fork,能夠實現水平伸縮、並且對於資料的讀寫都能提供低延遲訪問。Couchbase要比CouchDB功能更加全面,並且Couchbase產品包含了CouchDB的一個副本。Couchbase產品向CouchDB新增了快取、叢集等功能。此外,Couchbase還包含一些不錯的整合功能,對於資料儲存系統來說,Couchbase是一個不錯的選擇。

  7.Neo4j

  Neo4j是一款開源的高效能NoSQL圖資料庫,它使用圖(graph)相關的概念來描述資料模型,把資料儲存為圖中的節點以及節點之間的關係。支援ACID事務(原子性、獨立性、永續性和一致性)。

  在現實中,很多資料都是用圖來表達的,比如社交網路中人與人的關係、地圖資料、或是基因資訊等等。Neo4j中最基本的概念是節點(node)和關係(relationship)。節點表示實體,在兩個節點之間,可以有不同的關係。

  8.Riak

  Riak是基於Erlang和C語言開發,Riak是Amazon的高可用性鍵值儲存庫,用Erlang編寫且基於Dynamo,是一種高度可擴充套件的分散式資料儲存。Riak沒有主節點的概念,在處理故障方面更具靈活性。在開源版本中,不包含SNMP分散式模型。

  9.Redis

  Redis是一個開源、支援網路、基於記憶體、鍵值對儲存資料庫。開發者無需儲存數字和字串即可dump整個雜湊值、列表、集合以及其它複雜的結果儲存,此外,Redis還提供複製/同步和持久化等功能。

  Redis是一個高效能的鍵值對資料庫。Redis的出現,很大程度補償了memcached這類key/value儲存的不足,在部分場合可以對關聯式資料庫起到很好的補充作用。

  10.Firebird

  Firebird是一個跨平臺的關聯式資料庫,用C和C++開發。目前能夠執行在Windows、linux和各種Unix作業系統上,可以對儲存過程和觸發器提供高效能和強大的語言支援。

  Firebird既能作為多使用者環境下的資料庫伺服器執行,也提供嵌入式資料庫的實現。 

  11.Memcached

  Memcached是一套分散式的快取記憶體系統,它能夠用來儲存各種格式的資料,包括影像、視訊、檔案以及資料庫檢索結果等。簡單地說就是將資料呼叫到記憶體中,然後從記憶體中讀取,從而大大提高讀取速度。

  由於Memcached通常只是當作快取記憶體系統使用,所以使用Memcached的應用程式在寫回較慢的系統時(像是後端的資料庫)需要額外的程式碼更新Memcached內的資料。 

  12.Oracle Berkeley DB

  Oracle Berkeley DB是一個高效的嵌入式資料庫程式設計庫。Berkeley DB可以儲存任意型別的鍵/值對(Key/Value Pair),而且可以為一個鍵儲存多個資料。Berkeley DB支援讓數千的併發執行緒同時運算元據庫,支援最大256TB的資料,廣泛用於各種作業系統,其中包括大多數類Unix作業系統、Windows作業系統以及實時作業系統。

  13.Hypertable

  Hypertable是一個高效能的分散式資料儲存系統,採用與Google的BigTable相似的模型。具有高效能、可伸縮、可擴充套件,並且主要集中大規模資料集。

  Hypertable採用類似表的形式組織資料,但目前Hypertable並不支援關聯式資料庫中豐富的關係屬性。Hypertable將資料組織成一個多維稀疏矩陣。該矩陣中的所有行資訊可以基於主鍵(Primary Key)進行排序。

  14.Keyspace

  Keyspace是一款鍵值對資料庫儲存系統,Keyspace基於Master-Slave模式,所有的寫均由Master承擔,並通過paxos一致傳播到Slave,讀可以根據基本路由到Master或Slave。因此,當Master出現當機或不可訪問時,會存在一套Master的選舉機制,在keysapce中成為PaxosLease演算法。

  15.4store

  4store是一個高效、可擴充套件的RDF資料庫,它採用ANSI C99開發,可以同時執行超過15GT的資料查詢,使用它所開發的Web應用程式可同時支援上千人訪問。

  16.MariaDB

  MariaDB資料庫管理系統是MySQL的一個分支,完全相容MySQL,包括API和命令列,使之能輕鬆成為MySQL的代替品。在儲存引擎方面,使用XtraDB來代替MySQL的InnoDB。另外又新增了一些功能,以支援本地的非阻塞操作和進度報告。這意味著,所有使用MySQL的聯結器、庫和應用程式也將會在MariaDB下工作。

  MariaDB由MySQL的創始人麥克爾·維德紐斯主導開發,正如上文所提到的,由於擔心甲骨文存在將MySQL閉源的風險,目前已有許多公司將專案移到MariaDB上,比如維基百科、谷歌等。

  17.Drizzle

  Drizzle是一款免費/開源的關係型資料庫管理系統,基於C++開發,它是MySQL 6.0的一個分支。和MySQL一樣,Drizzle也是採用經典的C/S(客戶端/服務端)架構模式,其主要專注於為雲端應用提供一個可靠穩定的資料庫。

  18.HyperSQL

  HyperSQL是一款採用Java編寫的SQL關係型資料庫引擎,其核心是多執行緒,支援雙向鎖和MVCC,並且為基於記憶體和磁碟的表提供小而快速的資料庫引擎,支援嵌入式/伺服器模式。同時,它還擁有多種工具,比如命令列SQL工具、GUI查詢應用程式等。

  19.MonetDB

  MonetDB是一款開源的、面向列的資料庫管理系統,其專門為資料探勘、OLAP、GIS、XML查詢、文字及多媒體檢索提供高效能應用。

  MonetDB資料庫管理系統包含MonetDB/SQL、MonetDB/GIS、MonetDB伺服器。其還具有自動和自調優索引、執行時查詢優化以及模組化軟體架構。

  20.Persevere

  Persevere是一款物件儲存引擎和應用伺服器(基於Java/Rhino),它提供一個伺服器JavaScript環境來實現動態JSON資料的持久化資料儲存。支援通過標準JSON HTTP/REST Web介面來建立、讀取、更新和刪除資料。

  Persevere引以為自豪的是它的“schema-free”,這一特點使得它與其它資料庫有很大的區別。Persevere可以讓你隨心所欲的增加schema。Persevere並非把分級結構的頂層稱為一個domain(SimpleDB這麼稱呼),也不稱之為文件(CouchDB這麼稱呼),Persevere稱之為物件,它甚至可以讓你建立物件的子類。如果你想違背規則,你也能堅持某些欄位使用某一型別,但是這是不推薦的。Schema規則是可選的。

  21.eXist-db

  eXist-db是使用XML技術構建的開源XML資料庫,它根據XML資料模型、功能、基於索引的XQuery程式來儲存XML資料。程式通過eXist繫結的HTTP伺服器與eXist互動。eXist資料庫還提供了SOAP、XML-RPC 和RESTful介面,開發者可以通過這些介面向核心伺服器提交XPath、XQuery和XUpdate請求。命令列和GUI客戶機也是可用的。

  英文來自: The Professionals Point

相關文章