NoSQL简介:
NoSQL(NoSQL = Not Only SQL ),意即”不仅仅是SQL”。
在现代的计算系统上每天网络上都会产生庞大的数据量。
这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理。 1970年 E.F.Codd’s提出的关系模型的论文 “A relational model of data for large shared data banks”,这使得数据建模和应用程序编程更加简单。
通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。
NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
分类
1、 键值(Key-Value)存储数据库
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB。
2、 列存储数据库
这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak。
3、 文档型数据库
文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值,在处理网页等复杂数据时,文档型数据库比传统键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。
4、 图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph。
不同分类特点对比
NoSQL的一些功能特性:
- 使用NoSQL可以存储大量的结构化,半结构化和非结构化数据。
- 它支持敏捷的sprint,快速迭代和频繁的代码推送。
- 它使用频繁且易于使用的面向对象编程。
- 效率更高。 它具有横向扩展体系结构。它使用成本便宜,并具有整体架构。
适用场景
1、 数据模型比较简单;
2、 需要灵活性更强的IT系统;
3、 对数据库性能要求较高;
4、 不需要高度的数据一致性;
5、 对于给定key,比较容易映射复杂值的环境。
几个主要NoSQL特点介绍:
1、 Redis
Redis是另外一款因为闪电般的速度而被比较广泛使用的开源NoSQL数据库。它是用C语言开发的。以下是它的几个优点:
数据结构化:Redis提供了一个高效的数据结构扩展,它有时也被称为数据结构服务器。存储在数据库中的键值可以是hash值、列表、字符串、有序或无序集合等。
可作为缓存:你可以使用Redis作为一个缓存服务器。
非常快:当它以内存的性质工作时,它的执行效率非常的高,此时读写速度几乎没有区别。
2、 Riak
关键点: 容错性Fault tolerance 失败恢复 内置全文本搜索
适合: 如果你希望有类似Cassandra-like (Dynamo-like)风格, 但是你不想处理器复杂性和膨胀性。单服务器有良好可伸缩性scalability, 可用性availability 和容错性 fault-tolerance, 采取是昂贵的多站点复制multi-site replication.
案例:销售点数据收集,工厂控制系统,那些不能允许几秒当机的场合。
3、 HBase
关键点: 十亿级别的行 X 百万级别的列 大容量
大表模型(高一致性)。
Map/reduce with Hadoop 能够实时获得基于查询的优化性能的节约型网关适合:
适合:随机 实时的读写操作,高吞吐量写,随机访问大数据集。
案例: Facebook 消息数据库
4、 MongoDB
关键点: 强迫性一致;类SQL,容易上手 , 内置分片碎片
适合: 需要动态查询. 愿意事先定义索引indexes, 需要巨大的数据库有良好性能。
案例:适合90%所有MySQL等RDBM场合。
问题:数据集大于内存很慢。
MongoDB 使用MapReduce替代SQL的聚合功能进行分析,但是当前是单线程,并不可伸缩。
SQL与NoSQL区别:
1、语言
SQL数据库定义和操作基于数据的结构化查询语言(SQL)。从侧面看这种语言是非常强大的。SQL是最通用和最广泛使用的选项之一,使其成为安全的选择,尤其适用于复杂的查询。但从另一方面来说,它可能是限制性的。SQL要求您在使用之前使用预定义模式来确定数据的结构。此外,您的所有数据都必须遵循相同的结构。这可能需要大量的前期准备,这意味着结构的变化既困难又对整个系统造成破坏。
NoSQL数据库具有非结构化数据的动态模式。数据以多种方式存储,这意味着它可以是面向文档,面向列,基于图形或组织为KeyValue存储。这种灵活性意味着可以在没有首先定义结构的情况下创建文档。每个文档也可以有自己独特的结构。语法因数据库而异,您可以随时添加字段。
2、 可伸缩性
在几乎所有情况下,SQL数据库都是可垂直扩展的。这意味着您可以通过增加RAM,CPU或SSD等功能来增加单个服务器的负载。但另一方面,NoSQL数据库可以横向扩展。这意味着您可以通过分片或在NoSQL数据库中添加更多服务器来处理更多流量。它类似于在同一建筑物中添加更多楼层,而不是在附近增加更多建筑物。因此NoSQL最终可以变得更大,更强大,使这些数据库成为大型或不断变化的数据集的首选。
3、 结构
SQL数据库是基于表的,另一方面NoSQL数据库是键值对,基于文档的,图形数据库或宽列存储。这使得关系SQL数据库成为需要多行事务的应用程序(如会计系统)或为关系结构构建的遗留系统的更好选择。