NoSQL

来自中文百科,文化平台
跳转至: 导航搜索

NoSQL(Not Only SQL),是对不同于传统的关系数据库数据库管理系统的统称。

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

发展历史

NOSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。

2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再次提出了NOSQL的概念,这时的NOSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。

2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false;"。因此,对NOSQL最普遍的解释是“非关联型的”,强调键-值存储面向文档数据库的优点,而不是单纯的反对RDBMS。

基于2014年的收入,NOSQL市场领先企业是MarkLogic,MongoDB和DataStax。基于2015年的人气排名,最受欢迎的NOSQL数据库是MongoDBApache CassandraRedis

特点

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

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

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

分类

文档存储

名称 语言
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)储存

最终一致性键-值储存

  • Cassandra
  • Dynamo
  • Hibari
  • Project Voldemort
  • Riak

架构性键-值储存

  • GT.M
  • InterSystem Globals

主机式服务

Key/value硬盘存储

  • Tokyo Cabinet
  • Tuple space
  • TreapDB

Key/value RAM存储

Key-value基于Paxos算法的存储

  • Keyspace (data store)

多数据库

时序型数据库

名称 语言
Graphite Python
InfluxDB Go
Informix TimeSeries Erlang
OpenTSDB Java
RRDtool C

对象数据库

列存储

参见


方法
应用领域
应用实例
相关主题

数据挖掘是关于分析数据的;有关从数据中提取信息的信息,参见:



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