作為一名軟件開發人員或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客戶機也是可用的。
Via: The Professionals Point