一、概述
NoSQL(Not Only SQL),"不仅仅是SQL", 泛指非关系型的数据库;
1)特点
① 易扩展;
② 在大数据量下,NoSQL 数据库具有非常高的读写性能;
③ 多样灵活的数据模型;
2)RDBMS(关系型数据库) 和 NoSQL 比较
- RDBMS
- 高度组织化结构化数据;
- 结构化查询语言(SQL);
- 数据和关系都存储在单独的表中;
- 数据操作语言,数据定义语言;
- 严格的一致性;
- 基础事务;
- NoSQL
- 没有声明性查询语言;
- 没有预定义的模式;
- 键值对存储,列存储,文档存储,图形数据库;
- 最终一致型,而非ACID属性;
- 非结构化和不可预知的数据;
- CAP 定理;
- 高性能,高可用性和可伸缩性;
3、3V + 3高
- 大数据时代的3V(主要是描述问题的) 1.海量(Volume) 2.多样(Variety) 3.实时(Velocity)
- 互联网需求的3高(主要是对程序的要求) 1.高并发 2.高可扩 3.高性能
二、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.
分类 | 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度关系查找等 | 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。 |