NoSQL数据库(Not Only SQL),NoSQL,泛指非关系型的数据库。html
1、NoSQL数据库的四大分类
这一类数据库主要会使用到一个
哈希表,这个表中有一个特定的键和一个指针指向特定的数据。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数据库在如下的这几种状况下比较适用:一、数据模型比较简单;二、须要灵活性更强的IT系统;三、对数据库性能要求较高;四、不须要高度的数据一致性;五、对于给定key,比较容易映射复杂值的环境。
2、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度关系查找等 |
不少时候须要对整个图作计算才能得出须要的信息,并且这种结构不太好作分布式的集群方案。
|
3、适用场景
NoSQL数据库在如下的这几种状况下比较适用:
一、数据模型比较简单;
二、须要灵活性更强的IT系统;
三、对数据库性能要求较高;
四、不须要高度的数据一致性;
五、对于给定key,比较容易映射复杂值的环境。
4、常见NoSql数据库
听说如今已经有上百种NoSQL数据库了,下面来了解下常见的一些NoSQL数据库算法
先来看张表,了解下典型的NoSQL数据库的分类:数据库
临时性键值存储 |
永久性键值存储 |
面向文档的数据库 |
面向列的数据库 |
Memcached |
Tokyo Tyrant |
MangoDB |
Cassandra |
Redis |
Flare |
CouchDB |
HBase |
|
ROMA |
|
HyperTable |
|
Redis |
|
|
- 挥发性(临时性)的键值存储
- 通常做为关系型数据库的缓存来使用
- 具备很是快的处理速度
- 因为存在数据丢失的可能,因此通常用来处理不须要持久保存的数据
- 用于须要使用expires时(须要按期清除数据)
- 使用一致性散列(Consistent Hashing)算法来分散数据
Tokyo Tyrant
- 持久性的键值存储
- 用来处理须要持久保存,高速处理的数据
- 具备很是快的处理速度
- 用于不须要按期清除的数据
- 使用一致性散列(Consistent Hashing)算法来分散数据
Redis
- 兼具Memcached和Tokyo Tyrant优点的键值存储
- 擅长处理数组类型的数据
- 具备很是快的处理速度
- 能够高速处理时间序列的数据,易于处理集合运算
- 拥有不少能够进行原子操做的方法
- 使用一致性散列(Consistent Hashing)算法来分散数据
MongoDB
- 面向无需定义表结构的文档数据
- 具备很是快的处理速度
- 经过BSON的形式能够保存和查询任何类型的数据
- 没法进行JOIN处理,可是能够经过嵌入(embed)来实现一样的功能
- 使用sharding(范围分割)算法来分散数据
上面屡次提到了一致性散列,那到底什么是一致性散列呢?请参考这里 ,我就不赘述了数组
不过,当server数量不多时,极可能他们在圆周上的分布不是特别均匀,
致使cache不能均匀分布到全部的server上。缓存
这时候,就该请出虚拟节点了
为每一个物理节点(服务器)在圆上分配100~200个点,服务器
这样就能抑制分布不均匀,最大限度地减少服务器增减时的缓存从新分布,网络
用户数据映射在虚拟节点上,就表示用户数据真正存储位置是在该虚拟节点表明的实际物理服务器上。数据结构