常用資料庫有哪些?
本文為joshua317原創文章,轉載請註明:轉載自joshua317部落格https://www.joshua317.com/article/86
每一類資料庫的前 3~5 名,排名會不斷變化,實時的排名請參見http://db-engines.com/en/ranking網站。
大類 | 類別 | 前3~5名 | 說明 |
---|---|---|---|
SQL | 關係資料庫 | Oracle、MySQL/MariaDB、SQL Server、PostgrcSQL、 DB2 | 遵循“表一記錄”模型。按行儲存在檔案中(先第 1 行,然後第 2 行……) |
NoSQL | 時序資料庫 | InfluxDB、RRDtool、Graphite、OpcnTSDB、Kdb+ | 儲存時間序列資料,每條記錄都帶有時間戳。如儲存從感應器採集到的資料 |
鍵/值資料庫 | Redis、Memcached、Riak KV、Hazelcast、Ehcache | 遵循“鍵——值”模型,是最簡單的資料庫管理系統 | |
文件資料庫 | MongoDB、Couchbase、Amazon DynamoDB、CouchDB、MarkLogic | 無固定結構,不同的記錄允許有不同的列數和列型別。列允許包含多值,記錄允許巢狀 | |
圖數椐庫 | Neo4j、OrientDB、Titan、Virtuoso、ArangoDB | 以“點——邊”組成的網路(圖結構)來儲存資料 | |
搜尋引擎 | Elasticsearch、Solr、Splunk、MarkLogic、Sphinx | 儲存的目的是為了搜尋,主要功能是搜尋 | |
物件資料庫 | Caché、db4o、Versant Object Database、ObjcctStore、Matisse | 受面向物件程式語言的啟發,把資料定義為物件並存儲在資料庫中,包括物件之問的關係,如繼承 | |
寬列資料庫 | Cassandra、HBase、Accumulo | 按照列(由“鍵——值”對組成的列表)在資料檔案中記錄資料,以獲得更好的請求及遍歷效率。一行中的列數允許動態變化,且列的數目可達數百萬,每條記錄的關鍵碼不同,支援多值列。 |
下面對排名靠前的開源資料庫做一些簡單介紹。
1. MySQL/MariaDB
2008 年美國 Sun 公司花費 10 億美元收購 MySQL,一年後 Oracle 公司又花費 60 億美元收購了 Sun 公司,從此 Sun 公司的伺服器、作業系統、MySQL 等產品線全部歸屬 Oracle 公司。
拉力·艾立森奉行的經營哲學是“競爭不過它,我就買了它”。競爭不過,說明競爭對手的產品更具優勢,所以收購它,從而變成自己的優勢。幾十年來,Oracle 從一家小型資料庫公司變成今天覆蓋硬體、平臺軟體、資料庫、中介軟體、應用軟體各個層次產品線的 IT 巨無霸,靠的就是美國的良好環境和總裁奉行的收購策略。
MySQL 資料庫佔據中小型資料庫應用市場的半壁江山,在這塊市場,Oracle 資料庫明顯佔下風,巔峰時世界上超過 70% 的網站後臺都採用 MySQL 資料庫。但是自從被 Oracle 公司收購後,MySQL 發展明顯趨緩,是繼續開源還是閉源,Oracle 公司一直沒下定論。於是 MySQL 的原班人馬陸續離開 Oracle 公司,另立爐灶,推出了 MariaDB 開源資料庫。
MariaDB 繼承了 MySQL 小巧精悍、簡潔高效、穩定可靠的特徵,並與 MySQL 保持相容。時至今日,已有 Google、Facebook 等知名企業把應用從 MySQL 切換到了 MariaDB 上,各種 Linux 發行版的作業系統預設資料庫都開始採用 MariaDB;而 Apple 公司反應更快,當 Oracle 公司收購 Sun 公司時,就切換到了 PostgreSQL 資料庫。
截至 2014 年年末的資料庫綜合排名,MySQL 繼續位居第二名,但是其表現出來的頹勢較明顯,而 MariaDB 卻具備強勁的生命力。
MariaDB 是一個開源的免費的關係資料庫,截至發稿前的最新版本是 10.0.15,安裝包可從https://downloads.mariadb.org網站下載。整個安裝包大約 200MB,幾乎能在所有的作業系統上安裝和執行,與 Oracle 資料庫、SQL Server、DB2 等商業資料庫動輒好幾張光碟相比,算是短小精悍了。
另外,也可以從這個網站下載資料庫的原始碼。對於非資料庫型的 SaaS 雲提供商來說,雲端採用 MariaDB 是最好的選擇,而且可以輕鬆搭建資料庫叢集。
2. PostgreSQL
PostgreSQL 能被蘋果公司大量使用並替換早期的 MySQL 資料庫,說明其一定有不俗的表現。在 2014 年年末的資料庫排行榜上,PostgreSQL 位居第四位,號稱世界上最先進的、最安全的開源資料庫,也是面向物件的關係資料庫。
華為內部區域網接入控制系統 SPES 也採用 PostgreSQL 資料庫,在 Linux 作業系統上執行,極少出問題。經過十多年的磨礪,如今 PostgreSQL 資料庫具備如下特點:
- 面向物件,安全性極高,能執行在全部主流的作業系統上,完全 ACID 相容。
- 支援外來鍵、連線、檢視、觸發器和儲存過程(多語言)。
- 支援最新的 SQL 2008 標準的資料型別,包括整型、數字型、字元型、布林型、可變字元型、日期型、時間戳、自增長型以及各種二進位制物件(如圖片、聲音和視訊等)。
- 提供了各種流行語言的程式設計介面,如 C/C++、Java、.NET、Perl、Python、Ruby、Tcl、ODBC 等。
PostgreSQL 資料庫同時具備很多眾多令人振奮的優點,比如線上備份、資料域、表分割槽、表空間、巢狀事務、時刻點恢復、兩段式提交、多版本併發控制、子查詢等。
在 PostgreSQL 中,資料庫大小沒有限制,表大小上限為 32TB,一條記錄的大小上限為 1.6TB,欄位大小上限是 1GB,一個表包含的記錄數沒有限制,一條記錄的欄位數上限為 1600 個,一個表上建立的索引數目沒有限制。
另外,SQLite 是一個非常小型的 ACID 相容的關係資料庫,適合嵌入式系統。
3. InfluxDB
InfluxDB 是一個開源的時間序列資料庫,能應付極高的寫和查詢併發數,主要用於儲存大規模的時間戳資料(每條記錄自動附加時間戳),如 DevOps 監控資料、應用系統執行指標資料、物聯網感應器採集的資料及實時分析的結果資料等。InfluxDB 具備如下特徵:
- 全部用 Go 語言編寫,並被編譯成單一執行程式,無須第三方依賴。
- 簡潔、高效地寫和查詢 HTTP(S)程式設計介面(API)。
- 通過外掛能與其他的資料採集工具整合,如 Graphite、collectd、OpenTSDB。
- 可以搭建高可用性的 InfluxDB 環境。
- 量身定製化的類-SQL 語言。
- 允許給序列資料附加標籤來建立索引,以便快速高效查詢。
- 通過定義策略輕鬆實現自動失效過時的資料。
- 基於 Web 的管理介面。
對於一個具體的時間序列應用來說,除儲存外,還需要整合資料採集、視覺化和告警功能。為此,InfluxData 社群相應提供了 Telegraf(資料採集)、Chronograf(資料視覺化)、Kapacitor(告警)三個開源專案,再加上 InfluxDB,能部署成一個完整的時間序列應用系統(簡稱為 TICK)。這四者的關係如下圖所示。
4. Redis
Redis 是遵循 BSD 開源協議的儲存系統,資料儲存在記憶體中,因此具備極高的效能,可用作資料庫、快取和訊息中介軟體。Redis 支援多種型別的資料結構,如字串、雜湊、列表、集合、帶範圍查詢的有序集合、點陣圖、hyperloglogs 和帶半徑查詢的地理空間索引。
Redis 內建了複製、指令碼語言程式設計、最近最少使用(LRU)淘汰、事務以及不同級別的磁碟持久化等功能,通過 Redis Sentinel 和叢集自動分割槽機制實現高可用性。Redis 採用 C 語言編寫,能執行在 Windows、MacOS X、Linux、Solaris 等作業系統上,不過 Linux 是其最佳的執行平臺,無須第三方依賴,它提供了最廣泛的程式語言介面。
5. MongoDB
MongoDB 是排名第一的文件資料庫,屬於 NoSQL 大類,誕生於 2009 年,正好是雲端計算興起的前夜。MongoDB 採用 C++ 語言開發,能執行在 Windows、MacOS X、Linux、Solaris 作業系統上,提供了絕大部分計算機語言的程式設計介面。儲存在 MongoDB 中的一條記錄稱為一個文件,類似 JSON 語法,例如:
從上面的例子可以看出,一個文件就是“鍵:值”對的集合。
MongoDB 的主要優勢包括:高效能、富查詢語言(支援 CRUD、資料聚合、文字搜尋和地理空間查詢)、高可靠性、自動伸縮架構、支援多儲存引擎。MongoDB 適合文件儲存、檢索和加工的應用場合,如大資料]分析。
6. Neo4j
Neo4j 是一個用 Java 語言開發的圖資料庫,它將結構化資料儲存在由“點—邊”組成的網路(數學術語叫“圖”)上而不是表中。與關係資料庫相比,圖資料庫擅長處理大量複雜、互連線、低結構化的資料。這些資料變化迅速,需要頻繁查詢,如果使用關係資料庫,那麼這些查詢會導致大量的表連線,因此會產生效能上的問題。
Neo4j 重點解決了擁有大量連線的傳統關係資料庫在查詢時出現的效能衰退問題。Neo4j 還提供了非常快的圖演算法、推薦系統和 OLAP 風格的分析,而這一切在目前的關係資料庫系統中都無法實現。Neo4j 提供了廣泛使用的 REST 介面,能夠方便地整合到基於 Java、PHP、.NET 和 JavaScript 的環境裡。
Neo4j 使用 Cypher 語言進行增刪改操作,例如:
建立了兩個節點:變數“e1”和“e2”,標籤“員工”,屬性“{……}”。建立了一條邊,最終形成下圖。
7. Elasticsearch
Elasticsearch 是一個高度可擴充套件的開源全文搜尋和分析引擎,用於儲存、搜尋和近乎實時地分析大規模資料。Elasticsearch 常被人們用於構建具備複雜搜尋功能的應用系統,比如維基百科和優步的搜尋,再比如網店中搜索商品、商業智慧、日誌收集與分析、價格告警等。利用 Elasticsearch 實現的資料採集、儲存和視覺化套件 ELK(Elasticsearch、Logstash、Kibana)在日誌分析領域應用最為廣泛。
8. Cache
大概 20 年前,人們提出了後關係型資料庫的概念,目前已有不少產品,其中由 InterSystems 公司開發的 Caché 是後關係型資料庫中的領頭羊,它提供 3 種方式訪問資料:物件訪問、SQL 訪問、直接對多維資料陣列訪問,而且 3 種訪問方式能夠併發訪問同一資料。多維資料結構和多種資料庫訪問方式構成了後關係型資料庫的基礎。
Cache 資料庫具備如下一些特點:
1)速度快
Cache資料庫在同等條件下查詢相同資料,比 Oracle 等普通資料庫要快 7~20 倍。
2)節省儲存空間
儲存空間可能節省 2/3,而基於 Cache 的應用程式,比原來基於關係型資料庫的應用程式執行有可能快 20 倍。
3)使用簡單
Cache 資料庫支援標準 SQL 語句,因此不太熟悉 M 語言的使用者依然可以輕鬆對資料庫中的資料進行操作。
4)介面容易
Cache 資料庫支援 ODBC 標準介面,因此在與其他系統進行資料交換時非常容易,同時 Cache 亦可以將資料輸出為文字檔案格式,以供其他系統訪問呼叫。
5)真正的三層結構
Cache 資料庫能夠在真正意義上實現 3 層結構,實現真正的分散式服務,便於做橫向擴張。
6)物件型編輯
Cache 資料庫是真正的物件型資料庫,開發時使用者可直接用資料庫定義自己想要的物件,然後再在其他開發工具中呼叫該物件的方法和屬性即可完成開發工作,非常方便。
7)支援 Web 開發
Cache 資料庫提供自帶的 Web 開發工具,使用、維護非常方便,符合當今軟體業發展的趨勢。
8)價格便宜
Cache 資料庫的價格比 Oracle 資料庫要便宜很多。
Cache 資料庫在歐美的醫療系統使用最為普遍,被醫療界公認為首選的資料庫,國內中山大學第三附屬醫院、深圳南山醫院、北京安貞醫院等也採用 Cache 資料庫
9. Cassandra
Cassandra 是在 Google 的 Bigtable 基礎上發展起來的 NoSQL 資料庫,由臉譜於 2008 年用 Java 語言開發,目前被貢獻給 Apache 基金會。Cassandra 被稱為“列資料庫”,這裡的“列”不是指關係資料庫中一個表中的列,而是由“鍵—值”對組成的列表(語法與 Python 語言中的列表相同),如:
Cassandra 中一行資料語法是“一行的鍵={列,列,…}”,一行可包含上百萬列,比如:
Cassandra 中的列族(ColumnFamily)格式是“列族名={若干行}”,一個列族可包含幾十億行,例如:
一個 Cassandra 執行例項管理很多鍵空間(Keyspace),Keyspace 相當於關係資料庫管理系統中的資料庫,一個鍵空間包含很多列族。鍵空間、列族、行、列的關係如下圖 所示。
所以,Cassandra 中的定址是一個四維或者五維雜湊表:
比如:
返回北京理工大學(gdpi)計算機系(computer)張三(zsan)這個學生的年齡。
OpenStack 生態中的 HBase 也是列資料庫,目前排名第二。
本文為joshua317原創文章,轉載請註明:轉載自joshua317部落格https://www.joshua317.com/article/86