非关系型数据库主要有四种数据存储类型:键值对存储(key-value)-----Redis,文档存储(document store)-----MongoDB,基于列的数据库(column-oriented)-----HBase,还有就是图形数据库(graph database)-----Neo4j。每一种都会解决相应的问题,这些问题是关系型数据库所不能解决的。而在实际应用中都会将这几种情况结合起来实现相应的功能。
上节介绍了HBase,这节接着给大家介绍剩下的三种非关系型数据库。
Redis
Redis是一个key-value存储系统,key为字符串类型,只能通过key对value进行操作,支持的数据类型包括string、list、set、zset(有序集合)和hash。
Redis支持主从同步,数据可以从主服务器向任意数量的从服务器上同步。
Redis事务允许一组命令在单一步骤中执行。事务有两个属性:在一个事务中的所有命令作为单个独立的操作顺序执行;Redis事务是原子的,原子意味着要么所有的命令都执行,要么都不执行。Redis 事务由指令 MULTI 发起的,之后传递需要在事务中和整个事务中,最后由 EXEC 命令执行所有命令的列表。
Redis分区
是将数据分割成多个 Redis 实例,使每个实例将只包含键子集的过程。它允许更大的数据库,使用多台计算机的内存总和,它允许按比例在多内核和多个计算机计算,以及网络带宽向多台计算机和网络适配器。
劣势:涉及多个键时,Redis事务无法使用;数据处理比较复杂;加和删除的容量可能会很复杂。
分区类型:范围分区;散列分区
Redis 数据库可以配置安全保护的,所以任何客户端在连接执行命令时需要进行身份验证。
应用:统计类
MongoDB
一个基于分布式文件存储的开源数据库系统,为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key value)对组成。
特点:
面向集合存储,易存储对象类型的数据;模式自由;支持动态查询;支持完全索引,包含内部对象;支持查询;支持复制和故障恢复;使用高效的二进制数据存储,包括大型对象(如视频);自动处理碎片,以支持云计算层次的扩展性;支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言;文件存储格式为BSON(一种JSON的扩展);可通过网络访问。
适用场景:网站数据;缓存;大尺寸,低价值的数据;高伸缩性的场景;用于对象及JSON 数据的存储。
不适用场景:高度事务性的系统;传统的商业智能应用;需要SQL 的问题。
引用式文档查询:需要两次查询
第一次查询用户地址的对象id(ObjectId);
第二次通过查询的id获取用户的详细地址信息。
集合中索引不能超过64个;索引名的长度不能超过125个字符;一个复合索引最多可以有31个字段。mongorestore 命令来恢复备份的数据。
Neo4j
是一个高性能的 NoSQL 图形数据库,把数据保存为图中的节点以及节点之间的关系。Neo4j 中两个最基本的概念是节点和边,节点表示实体,边则表示实体之间的关系。节点和边都可以有自己的属性,不同实体通过各种不同的关系关联起来,形成复杂的对象图。
Neo4j 提供了在对象图上进行查找和遍历的功能:深度搜索、广度搜索。
特点:
完整的ACID支持;高可用性;轻易扩展到上亿级别的节点和关系;通过遍历工具高速检索数据;属性是由Key-Value键值对组成。
应用:社交网络,歌曲信息,状态图
数据库转化
关系型数据库
HBase
Redis
MongoDB
Neo4j
以上图片来自于其他csdn文章
四种的区别: