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

📚 Artikel Terkait di Wikipedia

ODBC

ODBC(Open Database Connectivity,开放数据库互连)提供了一种标准的API(应用程序编程接口)方法来访问数据库管理系统(DBMS)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。ODBC的设计者们努力使它具有最大的独立性和开放性。

PL-SQL

PL/SQL(Procedural Language/SQL)是甲骨文公司專有的SQL擴展語言,應用在甲骨文公司的Oracle数据库系統。一些的SQL数据库管理系統也提供了類似的擴展SQL語言。PL/SQL的語法非常類似於Ada,而且像1980年代的Ada編譯器一樣,PL/SQL的運作系統使用Diana作為中介語言。

MySQL

SQL。 但被甲骨文公司收購後,Oracle大幅調漲MySQL商業版的售價,且甲骨文公司不再支持另一個自由軟體專案OpenSolaris的發展,因此導致自由軟體社群們對於Oracle是否還會持續支援MySQL社群版(MySQL之中唯一的免費版本)有所隱憂,MySQL

SQL Server Express

Microsoft SQL Server Express是微软公司所開發的关系数据库產品SQL Server的免費下載版本,可自由下載、分發(需經註冊)及使用。這個版本的設計是專門為嵌入式系统或較小型的程式而設計。本產品可遡源至過往隨同SQL Server 2000軟件分發的Microsoft Database

SQL

SQL(i/ˈɛs kjuː ˈɛl/或i/ˈsiːkwəl/,Structured Query Language,结构化查询语言)是一种特定目的程式语言,用于管理关系数据库管理系统(RDBMS),或在关系流数据管理系统(RDSMS)中进行流处理。 20 世纪 70 年代推出的 SQL 相比早期的读写

PostgreSQL

PostgreSQL(/ˌpoʊstɡrɛskjuˈɛl/ POHST-gres-kew-EL)是一款功能全面且开源的关系型数据库管理系统,凭借其卓越的扩展能力和对SQL标准的严格遵循而广受赞誉。作为一款成熟的数据库系统,它不仅支持符合ACID特性的事务处理,还集成了自动更新的视图、物化视图、触发器

OpenShift

是一个开源项目,是构成前两个的基础。 OpenShift Online 为免费用户提供三个small gear的资源,用户创建应用时可以用一个 gear,也可以用多个 gear。 Node.js Ruby Python PHP Perl Java MySQL PostgreSQL MongoDB Open

SAP Web应用服务器

完全不考虑底层数据库和操作系统来开发。对开放标准的支持也使数据库无关成为可能。数据库接口保证从ABAP环境里通过Open SQL进行的数据访问都是经过优化的。SAP还推出了Open SQL对Java的支持,为应用开发人员提供了多种标准API,如SQLJ。其他技术,比如JDO和CMP EJB,或者直接使用JDBC