NoSQL(最初表示Non-SQL[1],後來有人轉解為Not only SQL[2][3]),是對不同於傳統的關聯式資料庫資料庫管理系統的統稱。

允許部分資料使用SQL系統儲存,而其他資料允許使用NoSQL系統儲存。其資料儲存可以不需要固定的表格模式以及元資料(metadata),也經常會避免使用SQL的JOIN操作,一般有水平可延伸性英語Database_scalability的特徵。

發展歷史

NoSQL一詞最早出現於1998年,是Carlo Strozzi開發的一個輕量、開源、不提供SQL功能的關聯式資料庫[4]

2009年,Last.fm的Johan Oskarsson發起了一次關於分散式開源資料庫的討論[5],來自Rackspace的Eric Evans再次提出了NoSQL的概念,這時的NoSQL主要指非關係型、分散式、不提供ACID的資料庫設計模式。

2009年在亞特蘭大舉行的「no:sql(east)」討論會是一個里程碑,其口號是「select fun, profit from real_world where relational=false;」。因此,對NoSQL最普遍的解釋是「非關聯型的」,強調鍵-值儲存文件導向資料庫的優點,而不是單純的反對RDBMS。

基於2014年的收入,NoSQL市場領先企業是MarkLogic英語MarkLogicMongoDBDatastax英語DataStax[6]。基於2015年的人氣排名,最受歡迎的NoSQL資料庫是MongoDBApache CassandraRedis[7]

特點

當代典型的關聯式資料庫在一些資料敏感的應用中表現了糟糕的效能,例如為巨量檔案建立索引、高流量網站的網頁服務,以及傳送串流媒體[8]。關係型資料庫的典型實現主要被調整用於執行規模小而讀寫頻繁,或者大批次讀而極少寫訪問的事務。

NoSQL的結構通常提供弱一致性的保證,如最終一致性,或交易僅限於單個的資料項。不過,有些系統,提供完整的ACID保證在某些情況下,增加了補充中間件層(例如:CloudTPS)[9]。有兩個成熟的系統有提供快照隔離的列儲存:像是Google基於過濾器系統的BigTable[10],和滑鐵盧大學開發的HBase[11]。這些系統,自主開發,使用類似的概念來實現多行(multi-row)分散式ACID交易的快照隔離(snapshot isolation)保證為基礎列儲存,無需額外的資料管理開銷,中間件系統部署或維護,減少了中間件層。

少數NoSQL系統部署了分散式結構,通常使用分散式雜湊表(DHT)將資料以冗餘方式儲存在多台伺服器上。依此,擴充系統時候添加伺服器更容易,並且擴大了對伺服器失效的承受能程度。[12]

分類

檔案儲存

名稱 語言
BaseX XQueryJava
CouchDB Erlang
eXist XQuery
iBoxDB JavaC#
Jackrabbit Java
Lotus Notes LotusScriptJava
MarkLogic Server XQuery
MongoDB C++
RethinkDB C++
OrientDB Java
SimpleDB Erlang
Terrastore Java
Elasticsearch Java
No2DB C#

圖形資料庫

名稱 語言
AllegroGraph SPARQL
Sparksee JavaC#
Neo4j Java
FlockDB Scala
JanusGraph Java

鍵-值(key‐value)儲存

架構性鍵-值儲存

主機式服務

Key/value硬碟儲存

Key/value RAM儲存

Key-value基於Paxos演算法的儲存

多資料庫

時序型資料庫

名稱 語言
Graphite Python
InfluxDB Go
Informix TimeSeries Erlang
OpenTSDB Java
RRDtool C
IoTDB Java

物件資料庫

列儲存

參考文獻

  1. ^ http://nosql-database.org/頁面存檔備份,存於網際網路檔案館) "NoSQL DEFINITION: Next Generation Databases mostly addressing some of the points : being non-relational, distributed, open-source and horizontally scalable".
  2. ^ NoSQL (Not Only SQL). [2021-03-10]. (原始內容存檔於2021-04-21). NoSQL database, also called Not Only SQL 
  3. ^ Fowler, Martin. NosqlDefinition. [2021-03-10]. (原始內容存檔於2021-05-01). many advocates of NoSQL say that it does not mean a "no" to SQL, rather it means Not Only SQL 
  4. ^ Lith, Adam; Jakob Mattson. Investigating storage solutions for large data: A comparison of well performing and scalable data storage solutions for real time extraction and batch insertion of data (PDF). Göteborg: Department of Computer Science and Engineering, Chalmers University of Technology: 15, 70. 2010 [2011-05-12]. (原始內容存檔 (PDF)於2011-08-16). Carlo Strozzi first used the term NOSQL in 1998 as a name for his open source relational database that did not offer a SQL interface[...] 
  5. ^ NOSQL 2009. Blog.sym-link.com. 2009-05-12 [2010-03-29]. (原始內容存檔於2011-07-16). 
  6. ^ Hadoop-NoSQL-rankings. [2015-11-17]. (原始內容存檔於2015-11-18). 
  7. ^ DB-Engines Ranking. [2015-07-31]. (原始內容存檔於2020-02-21). 
  8. ^ Agrawal, Rakesh et al. The Claremont report on database research (PDF). SIGMOD Record (電腦協會). 2008, 37 (3): 9–19 [2011-06-22]. ISSN 0163-5808. doi:10.1145/1462571.1462573. (原始內容存檔 (PDF)於2011-07-16). 
  9. ^ CloudTPS: Scalable Transactions for Web Applications in the Cloud. Globule.org. [2010-03-29]. (原始內容存檔於2010-06-30). 
  10. ^ Large-scale Incremental Processing Using Distributed Transactions and Notifications (PDF). The 9th USENIX Symposium on Operating Systems Design and Implementation (OSDI 2010), Oct 4–6, 2010, Vancouver, BC, Canada. [2010-10-15]. (原始內容存檔 (PDF)於2016-03-05). 
  11. ^ Supporting Multi-row Distributed Transactions with Global Snapshot Isolation Using Bare-bones HBase (PDF). The 11th ACM/IEEE International Conference on Grid Computing (Grid 2010), Oct 25-29, 2010, Brussels, Belgium. [2010-10-15]. (原始內容 (PDF)存檔於2011-06-29). 
  12. ^ Cassandra: Structured Storage System over a P2P Network (PDF). [2010-03-29]. (原始內容存檔 (PDF)於2009-08-24). 
  13. ^ Riak: An Open Source Scalable Data Store. 2010-11-28 [2010-11-28]. (原始內容存檔於2010年12月31日). 
  14. ^ 存档副本. [2011-06-22]. (原始內容存檔於2011-05-25). 

外部連結

參見

  • 最終一致性(BASE——基本可用、弱狀態、最終一致性——的其中一個組成要求,與關聯式資料庫的Acid相對)
  • CAP