NoSQL

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（英语：MarkLogic），MongoDB和Datastax（英语：DataStax）[6]。基于2015年的人气排名，最受欢迎的NoSQL数据库是MongoDB，Apache Cassandra和Redis[7]。

## 特点

[编辑]

当代典型的關聯式資料庫在一些数据敏感的应用中表现了糟糕的性能，例如为巨量文档建立索引、高流量网站的网页服务，以及发送流式媒体[8]。关系型数据库的典型实现主要被调整用于执行规模小而读写频繁，或者大批量读而极少写访问的事务。

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

少数NoSQL系统部署了分布式结构，通常使用分散式雜湊表（DHT）将数据以冗余方式保存在多台服务器上。依此，扩充系统时候添加服务器更容易，并且扩大了对服务器失效的承受能程度。[12]

## 分类

[编辑]

### 文档存储

[编辑]

名稱 | 語言

|

BaseX | XQuery，Java
CouchDB | Erlang
eXist | XQuery
iBoxDB | Java，C#
Jackrabbit | Java
Lotus Notes | LotusScript，Java等
MarkLogic Server | XQuery
MongoDB | C++
RethinkDB | C++
OrientDB | Java
SimpleDB | Erlang
Terrastore | Java
Elasticsearch | Java
No2DB | C#

### 图数据库

[编辑]

名稱 | 語言

|

AllegroGraph | SPARQL
Sparksee | Java ， C#
Neo4j | Java
FlockDB | Scala
JanusGraph | Java

### 鍵-值（key‐value）儲存

[编辑]

#### 最終一致性的鍵-值儲存

[编辑]

* Cassandra
* Dynamo（英语：Dynamo (storage system)）
* Hibari（英语：Hibari (database)）
* Project Voldemort（英语：Project Voldemort）
* Riak（英语：Riak） [13]

#### 架構性鍵-值储存

[编辑]

* GT.M（英语：GT.M）
* InterSystem Globals[14]

### 主機式服務

[编辑]

#### Key/value硬盘存储

[编辑]

* BigTable
* MemcacheDB（英语：MemcacheDB）
* LevelDB

* Tokyo Cabinet（英语：Tokyo Cabinet）
* Tuple space（英语：Tuple space）
* TreapDB（英语：TreapDB）

#### Key/value RAM存储

[编辑]

* Oracle Coherence（英语：Oracle Coherence）
* memcached
* Citrusleaf database
* Velocity (memory cache)（英语：Velocity (memory cache)）
* Redis
* Tuple space（英语：Tuple space）

#### Key-value基于Paxos算法的存储

[编辑]

* Keyspace (data store)（英语：Keyspace (data store)）

### 多数据库

[编辑]

* OpenQM
* Rocket U2
* Revelation Software's OpenInsight
* Extensible Storage Engine（ESE/NT）

### 时序型数据库

[编辑]

名稱 | 語言

|

Graphite | Python
InfluxDB | Go
Informix TimeSeries | Erlang
OpenTSDB | Java
RRDtool | C
IoTDB | Java

### 对象数据库

[编辑]

* Versant Object Database
* db4o
* GemStone/S
* InterSystems Caché
* JADE
* Objectivity/DB
* ZODB
* ObjectStore

### 列存储

[编辑]

* Cassandra
* HBase
* Hypertable

## 参考文献

[编辑]

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[...]"  引文使用过时参数`coauthors` (帮助)
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）.  引文格式1维护：显式使用等标签 (link)
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）.

## 外部链接

[编辑]

* NoSQL非关系数据库简介 （页面存档备份，存于互联网档案馆）
* Amazon数据库论文 （页面存档备份，存于互联网档案馆）
* 在互联网上拥有NoSQL相关链接最多的网站。 （页面存档备份，存于互联网档案馆）
* NoSQL数据库笔谈
* Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j comparison （页面存档备份，存于互联网档案馆）

## 参见

[编辑]

* 最终一致性（BASE——基本可用、弱状态、最终一致性——的其中一个组成要求，与关系数据库的Acid相对）
* CAP

* 查
* 论
* 编

NoSQL

鍵值存儲|

| 最終一致性鍵值存儲|

* Cassandra
* Dynamo（英语：Dynamo）
* Riak（英语：Riak）
* Hibari（英语：Hibari）
* Virtuoso（英语：Virtuoso）
* Voldemort（英语：Voldemort_(distributed_data_store)）

|

內存鍵值存儲|

* Memcached
* Redis
* Oracle Coherence（英语：Oracle Coherence）
* NCache（英语：NCache）
* Hazelcast（英语：Hazelcast）
* Tuple space（英语：Tuple space）
* Velocity（英语：Velocity_(memory_cache)）

持久化鍵值存儲|

* BigTable
* LevelDB
* Tokyo Cabinet（英语：Tokyo Cabinet）
* Tarantool
* TreapDB（英语：TreapDB）
* Tuple space（英语：Tuple space）

文檔存儲|

* MongoDB
* CouchDB
* SimpleDB
* Terrastore
* BaseX（英语：BaseX）
* Clusterpoint（英语：Clusterpoint）
* Riak（英语：Riak）
* No2DB

圖存儲|

* FlockDB（英语：FlockDB）
* DEX
* Neo4J（英语：Neo4J）
* AllegroGraph（英语：AllegroGraph）
* InfiniteGraph（英语：InfiniteGraph）
* OrientDB（英语：OrientDB）
* Pregel

NoSQL理論|

* 分佈式系統
* CAP定理
* 弱一致性
* 强一致性
* 最終一致性
* MapReduce
* BASE

NoSQL數據庫比較

* 查
* 论
* 编

数据库管理系统（DBMS）

概念|

* 数据库
* 理論
* 数据模型
* 数据库存储结构（英语：Database storage structures）
* 关系 (数据库)
* 关系模型
* 分布式数据库
* ACID
* 原子性（英语：Atomicity (database systems)）
* 一致性
* 隔離性
* 持久性
* Null值
* 数据库规范化
* 數據庫完整性
* 實體完整性
* 參照完整性
* 关系数据库管理系统
* 主键
* 外键
* 代理键
* 超键
* 候选键
* 事务处理
* 增刪查改

数据库组件|

* 触发器
* 视图
* 数据库表
* 列
* 行
* 指标
* 事务日志（英语：Transaction log）
* 数据库事务
* Savepoint
* 并发控制
* 乐观锁
* 悲观锁
* 数据库索引
* 存储程序
* 資料庫分割（英语：Partition (database)）

SQL|

| 分类|

* 数据查询语言（DQL）
* 資料定義語言（DDL）
* 資料操縱語言（DML）
* 資料控制語言（DCL）

|

指令|

* SELECT
* INSERT
* UPDATE
* MERGE
* DELETE
* JOIN
* UNION
* CREATE
* DROP
* Begin work
* COMMIT
* ROLLBACK
* TRUNCATE
* ALTER

安全|

* SQL注入
* 參數化查詢

实现|

| 类型|

* 关系数据库
* 面向文檔的數據庫
* 平面文件数据库
* Deductive（英语：Deductive database）
* 維度化資料庫
* 階層式
* 图数据库
* NoSQL
* NewSQL
* 物件資料庫
* 物件關聯式資料庫（英语：Object-relational database）
* Temporal
* XML資料庫（英语：XML database）

|

数据库产品|

* 对象型
* 对比
* 关系型
* 对比

数据库组件|

* 数据查询语言
* 查詢最佳化器（英语：Query optimizer）
* 查詢計畫（英语：Query plan）
* 嵌入式SQL
* ORM
* LINQ
* 数据访问层
* ODBC
* OLE DB
* ADO
* ADO.NET
* JDBC
* PDO

*[查]: 查看该模板
*[论]: 讨论该模板
*[编]: 编辑该模板