随着NoSQL的流行,了解这种新型数据库十分有必要。数据库
首先,为何咱们要选择NoSQL?服务器
主要是两个缘由:一是待处理的数据量很大,或对数据访问的效率要求很高,从而必须将数据放在集群上;二是想采用一种更为方便的数据交互方式来提升应用程序开发效率数据结构
而传统关系数据库最大的问题,应该就是阻抗失谐分布式
第二,NoSQL数据库的共同特性是什么?性能
不使用关系模型;在集群中运行良好;开源;适用于21世纪的互联网公司;无模式优化
第三,NoSQL数据模型:索引
模型主要能够分为四类:‘键值’ ‘文档’ ‘列族’ ‘图’ 前三种数据模型有一个共同的特征,就是“面向聚合”。开发
面向聚合所用的方式,操做数据时所用的单元,结构比元组集合复杂得多,以这种复杂结构来存放列表或嵌套其余记录结构。文档
具体来讲同步
1)键值数据模型和文档数据模型 二者之间界限比较模糊。区别以下:键值数据库的聚合不透明。只包含一些没有太多意义的大块信息;文档数据库的聚合中,能够看到其结构。不透明的优势是聚合中能够存储任意数据,除了限制大小外,其余方面很随意。文档数据库则要限制其中存放的内容,定义了容许的结构与数据类型,能够更好地访问数据
键值数据库基本上都是经过键来搜索聚合的内容,在文档数据库中,提交的查询关键词每每基于文档的内部结构
2)列族存储
采用大表格式数据模型。最好的理解方式是将其视为两级聚合结构。第一个键值表明行标识符,能够用它来获取想要的聚合。列族结构与“键值存储”的区别在于,“行聚合”自己又是一个映射,包含更详细的值。这些二级值就叫作列。
三种方式的对比:
共同点:使用聚合这一律念,聚合中有一个能够查找其内容的索引键。在集群上运行时,聚合是中心环节,由于数据库必须保证将聚合内的数据存放在同一个节点上。
不一样点:键值数据模型将聚合看作不透明的总体,只能根据键来查出整个聚合,而不能仅仅查询或获取其中的一部分;文档模型的聚合对数据库透明,因而能够只查询并获取其中一部分数据,不过,因为文档没有模式,所以,在想优化存储并获取聚合中的部份内容时,数据库不太好调整文档结构;列族模型把聚合分为列族,让数据库将其视为行聚合内的一个数据单元。此类聚合的结构有某种限制,可是数据库可利用此种结构的优势来提升其易访问性。
3)图数据库
重视数据间的“关系”,图是一种图形数据结构,其中含有链接节点的边。遍历十分迅速
第四:分布式模型
分布式模型基于服务器集群上的横向扩展。聚合成了数据分布的单元。数据分布有两条路径,复制和分片,它们是两项正交的技术,能够二者选其一,也能够都使用。接下来是几个分布式相关的概念
1)分片
不一样的用户须要访问数据集中的不一样部分,咱们所以把数据的各个部分存放于不一样的服务器中,以此实现横向扩展,这种技术叫分片
2)主从复制
把数据复制到多个节点,其中一个节点叫作“主节点“或”主要节点”,存放权威数据,并且一般负责处理数据更新操做。其他节点叫作从节点或“次要节点”,复制操做就要让从节点与主节点同步。
在须要频繁读取数据集的状况下,“主从复制”有助于提高数据访问性能,能够加强读取操做的故障恢复能力;可是一旦主节点出错,数据会丢失
3)对等复制
没有主节点的概念,全部副本地位相同,能够接受写入请求,并且丢失其中一个副本,并不影响整个数据库的访问