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