基本含义
NoSQL(NoSQL = Not Only SQL ),意即"不只仅是SQL"。
在现代的计算系统上天天网络上都会产生庞大的数据量。这些数据有很大一部分是由关系数据库管理系统(RDMBS)来处理。
1970年 E.F.Codd's提出的关系模型的论文 "A relational model of data for large shared data banks",这使得数据建模和应用程序编程更加简单。
经过应用实践证实,关系模型是很是适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。
NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势愈加高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一律念无疑是一种全新的思惟的注入。算法
RDBMS vs NoSQL
RDBMS
- 高度组织化结构化数据
- 结构化查询语言(SQL)
- 数据和关系都存储在单独的表中。
- 数据操纵语言,数据定义语言
- 严格的一致性
- 基础事务数据库
NoSQL
- 表明着不只仅是SQL
- 没有声明性查询语言
- 没有预约义的模式
- 键 - 值对存储,列存储,文档存储,图形数据库
- 最终一致性,而非ACID属性
- 非结构化和不可预知的数据
- CAP定理
- 高性能,高可用性和可伸缩性编程
NoSQL的优势/缺点
优势:
- 高可扩展性
- 分布式计算
- 低成本
- 架构的灵活性,半结构化数据
- 没有复杂的关系json
缺点:
- 没有标准化
- 有限的查询功能(到目前为止)
- 最终一致是不直观的程序缓存
NoSQL 数据库的四大分类
键值(Key-Value)存储数据库
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。
Key/value模型对于IT系统来讲的优点在于简单、易部署。
可是若是DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。
举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.安全
列存储数据库
这部分数据库一般是用来应对分布式存储的海量数据。
键仍然存在,可是它们的特色是指向了多个列。这些列是由列家族来安排的。
如:Cassandra, HBase, Riak.服务器
文档型数据库
文档型数据库的灵感是来自于Lotus Notes办公软件的,并且它同第一种键值存储相相似。
该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,好比JSON。
文档型数据库能够看做是键值数据库的升级版,容许之间嵌套键值。并且文档型数据库比键值数据库的查询效率更高。
如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。网络
图形(Graph)数据库
图形结构的数据库同其余行列以及刚性结构的SQL数据库不一样,它是使用灵活的图形模型,而且可以扩展到多个服务器上。
NoSQL数据库没有标准的查询语言(SQL),所以进行数据库查询须要制定数据模型。
许多NoSQL数据库都有REST式的数据接口或者查询API。
如:Neo4J, InfoGrid, Infinite Graph.数据结构
NoSQL 数据库的四大分类表格分析架构
分类 | Examples举例 | 典型应用场景 | 数据模型 | 优势 | 缺点 |
---|---|---|---|---|---|
键值(key-value) | Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。 | Key 指向 Value 的键值对,一般用hash table来实现 | 查找速度快 | 数据无结构化,一般只被看成字符串或者二进制数据 |
列存储数据库 | Cassandra, HBase, Riak | 分布式的文件系统 | 以列簇式存储,将同一列数据存在一块儿 | 查找速度快,可扩展性强,更容易进行分布式扩展 | 功能相对局限 |
文档型数据库 | CouchDB, MongoDb | Web应用(与Key-Value相似,Value是结构化的,不一样的是数据库可以了解Value的内容) | Key-Value对应的键值对,Value为结构化数据 | 数据结构要求不严格,表结构可变,不须要像关系型数据库同样须要预先定义表结构 | 查询性能不高,并且缺少统一的查询语法。 |
图形(Graph)数据库 | Neo4J, InfoGrid, Infinite Graph | 社交网络,推荐系统等。专一于构建关系图谱 | 图结构 | 利用图结构相关算法。好比最短路径寻址,N度关系查找等 | 不少时候须要对整个图作计算才能得出须要的信息,并且这种结构不太好作分布式的集群方案。 |
NoSQL 数据库更多分类
类型 | 部分表明 | 特色 |
列存储 | Hbase Cassandra Hypertable |
顾名思义,是按列存储数据的。最大的特色是方便存储结构化和半结构化数据,方便作数据压缩,对针对某一列或者某几列的查询有很是大的IO优点。 |
文档存储 |
MongoDB CouchDB |
文档存储通常用相似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段创建索引,实现关系数据库的某些功能。 |
key-value存储 |
Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis |
能够经过key快速查询到其value。通常来讲,存储无论value的格式,照单全收。(Redis包含了其余功能) |
图存储 |
Neo4J FlockDB |
图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,并且设计使用不方便。 |
对象存储 |
db4o Versant |
经过相似面向对象语言的语法操做数据库,经过对象的方式存取数据。 |
xml数据库 |
Berkeley DB XML BaseX |
高效的存储XML数据,并支持XML的内部查询语法,好比XQuery,Xpath。 |
适用场景
NoSQL数据库在如下的这几种状况下比较适用:
一、数据模型比较简单;
二、须要灵活性更强的IT系统;
三、对数据库性能要求较高;
四、不须要高度的数据一致性;
五、对于给定key,比较容易映射复杂值的环境。
共同特征
对于NoSQL并无一个明确的范围和定义,可是他们都广泛存在下面一些共同特征:
一、不须要预约义模式:不须要事先定义数据模式,预约义表结构。数据中的每条记录均可能有不一样的属性和格式。当插入数据时,并不须要预先定义它们的模式。
二、无共享架构:相对于将全部数据存储的存储区域网络中的全共享架构。NoSQL每每将数据划分后存储在各个本地服务器上。由于从本地磁盘读取数据的性能每每好于经过网络传输读取数据的性能,从而提升了系统的性能。
三、弹性可扩展:能够在系统运行的时候,动态增长或者删除结点。不须要停机维护,数据能够自动迁移。
四、分区:相对于将数据存放于同一个节点,NoSQL数据库须要将数据进行分区,将记录分散在多个节点上面。而且一般分区的同时还要作复制。这样既提升了并行性能,又能保证没有单点失效的问题。
五、异步复制:和RAID存储系统不一样的是,NoSQL中的复制,每每是基于日志的异步复制。这样,数据就能够尽快地写入一个节点,而不会被网络传输引发迟延。缺点是并不老是能保证一致性,这样的方式在出现故障的时候,可能会丢失少许的数据。
六、BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。
NoSQL数据库并无一个统一的架构,两种NoSQL数据库之间的不一样,甚至远远超过两种关系型数据库的不一样。能够说,NoSQL各有所长,成功的NoSQL必然特别适用于某些场合或者某些应用,在这些场合中会远远赛过关系型数据库和其余的NoSQL。
发展示状
计算机体系结构在数据存储方面要求具有庞大的水平扩展性,而NoSQL致力于改变这一现状。Google的 BigTable 和Amazon 的Dynamo使用的就是NoSQL型数据库。
NoSQL项目的名字上看不出什么相同之处,可是,它们一般在某些方面相同:它们能够处理超大量的数据。
这场革命仍然须要等待。的确,NoSQL对大型企业来讲还不是主流,可是,一两年以后极可能就会变个样子。在NoSQL运动的最新一次聚会中,来自世界各地的150人挤满了CBS Interactive的一间会议室。分享他们如何推翻缓慢而昂贵的关系数据库的暴政的经验,怎样使用更有效和更便宜的方法来管理数据。
“关系型数据库给你强加了太多东西。它们要你强行修改对象数据,以知足RDBMS (relational database management system,关系型数据库管理系统)的须要,”在NoSQL拥护者们看来,基于NoSQL的替代方案“只是给你所须要的”。
水平扩展性(horizontal scalability)指可以链接多个软硬件的特性,这样能够将多个服务器从逻辑上当作一个实体。
挑战
尽管大多数NoSQL数据存储系统都已被部署于实际应用中,但概括其研究现状,还有许多挑战性问题。
一、已有key-value数据库产品大可能是面向特定应用自治构建的,缺少通用性;
二、已有产品支持的功能有限(不支持事务特性),致使其应用具备必定的局限性;
三、已有一些研究成果和改进的NoSQL数据存储系统,但它们都是针对不一样应用需求而提出的相应解决方案,如支持组内事务特性、弹性事务等,不多从全局考虑系统的通用性,也没有造成系列化的研究成果;
四、缺少相似关系数据库所具备的强有力的理论(如armstrong公理系统)、技术(如成熟的基于启发式的优化策略、两段封锁协议等)、标准规范(如SQL语言)的支持。
五、目前,HBase数据库是安全特性最完善的NoSQL数据库产品之一,而其余的NoSQL数据库多数没有提供内建的安全机制,但随着NoSQL的发展,愈来愈多的人开始意识到安全的重要,部分NoSQL产品逐渐开始提供一些安全方面的支持。
随着云计算、互联网等技术的发展,大数据普遍存在,同时也呈现出了许多云环境下的新型应用,如社交网络网、移动服务、协做编辑等。这些新型应用对海量数据管理或称云数据管理系统也提出了新的需求,如事务的支持、系统的弹性等。同时云计算时代海量数据管理系统的设计目标为可扩展性、弹性、容错性、自管理性和“强一致性”。目前,已有系统经过支持可随意增减节点来知足可扩展性;经过副本策略保证系统的容错性;基于监测的状态消息协调实现系统的自管理性。“弹性”的目标是知足Pay-per-use 模型,以提升系统资源的利用率。该特性是已有典型NoSQL数据库系统所不完善的,但倒是云系统应具备的典型特色;“强一致性”主要是新应用的需求。