NoSQL

NoSQL(最初表示Non-SQL[1],后来有人转解为Not only SQL[2][3]),是对不同于传统的关系数据库数据库管理系统的统称。

允许部分数据使用SQL系统保存,而其他数据允许使用NoSQL系统保存。其数据保存可以不需要固定的表格模式以及元数据(metadata),也经常会避免使用SQL的JOIN操作,一般有水平可扩展性的特征。

发展历史

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市场领先企业是MarkLogicMongoDBDatastax[6]。基于2015年的人气排名,最受欢迎的NoSQL数据库是MongoDBApache CassandraRedis[7]

特点

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

NoSQL的结构通常提供弱一致性的保证,如最终一致性,或交易仅限於单个的数据项。不过,有些系统,提供完整的ACID保证在某些情况下,增加了补充中间件层(例如:CloudTPS)[9]。有两个成熟的系统有提供快照隔离的列存储:像是Google基于过滤器系统的BigTable[10],和滑铁卢大学开发的HBase[11]。这些系统,自主开发,使用类似的概念来实现多行(multi-row)分布式ACID交易的快照隔离(snapshot isolation)保证为基础列保存,无需额外的数据管理开销,中间件系统部署或维护,减少了中间件层。

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

分类

文档存储

名称语言
BaseXXQueryJava
CouchDBErlang
eXistXQuery
iBoxDBJavaC#
JackrabbitJava
Lotus NotesLotusScriptJava
MarkLogic ServerXQuery
MongoDBC++
RethinkDBC++
OrientDBJava
SimpleDBErlang
TerrastoreJava
ElasticsearchJava
No2DBC#

图数据库

名称语言
AllegroGraphSPARQL
SparkseeJavaC#
Neo4jJava
FlockDBScala
JanusGraphJava

最终一致性键-值保存

架构性键-值储存

  • GT.M
  • InterSystem Globals[14]

Key/value硬盘存储

  • Tokyo Cabinet
  • Tuple space
  • TreapDB

Key/value RAM存储

  • Oracle Coherence
  • memcached
  • Citrusleaf database
  • Velocity (memory cache)
  • Redis
  • Tuple space

Key-value基于Paxos算法的存储

  • Keyspace (data store)

多数据库

  • OpenQM
  • Rocket U2
  • Revelation Software's OpenInsight
  • Extensible Storage Engine(ESE/NT)

时序型数据库

名称语言
GraphitePython
InfluxDBGo
Informix TimeSeriesErlang
OpenTSDBJava
RRDtoolC
IoTDBJava

对象数据库

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

列存储

参考文献

  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. . [2021-03-10]. (原始内容存档于2021-04-21). NoSQL database, also called Not Only SQL
  3. Fowler, Martin. . [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. (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. . Blog.sym-link.com. 2009-05-12 [2010-03-29]. (原始内容存档于2011-07-16).
  6. . [2015-11-17]. (原始内容存档于2015-11-18).
  7. . [2015-07-31]. (原始内容存档于2020-02-21).
  8. Agrawal, Rakesh et al. (PDF). SIGMOD Record (计算机协会). 2008, 37 (3): 9–19 [2011-06-22]. ISSN 0163-5808. doi:10.1145/1462571.1462573. (原始内容存档 (PDF)于2011-07-16).
  9. . Globule.org. [2010-03-29]. (原始内容存档于2010-06-30).
  10. (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. (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. (PDF). [2010-03-29]. (原始内容存档 (PDF)于2009-08-24).
  13. . 2010-11-28 [2010-11-28]. (原始内容存档于2010年12月31日).
  14. . [2011-06-22]. (原始内容存档于2011-05-25).

外部链接

参见

  • 最终一致性(BASE——基本可用、弱状态、最终一致性——的其中一个组成要求,与关系数据库的Acid相对)
  • CAP
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.