自己整理的NoSQL非关系数据库的复习资料
主要来自智库和老师ppt,图片为PPT截图,侵删
NoSQL2020-2021期末考试题回忆
https://blog.csdn.net/lwt1597532486/article/details/111999489
from 韬
关系数据库的不足:大量数据的写入处理;表结构变更及建立索引;字段不固定的应用;对简单查询需要快速返回结果的处理
NoSQL数据库的优势:易于数据的分散;提升性能和增大规模;模式自由;扩展性好
可用性: 一直可以正常的做读写操作。简单而言就是客户端一直可以正常访问并得到系统的正常响应。用户角度来看就是不会出现系统操作失败或者访问超时等问题
一致性:在分布式系统完成某写操作后任何读操作,都应该获取到该写操作写入的那个最新的值。相当于要求分布式系统中的各节点时时刻刻保持数据的一致性
分区容错性:指的分布式系统中的某个节点或者网络分区出现了故障的时候,整个系统仍然能对外提供满足一致性和可用性的服务,也就是说部分故障不影响整体使用
选择CA,放弃P - > 关系型数据库
选择CP,放弃A - > 分布式数据库
选择AP,放弃C - > 保证最终一致性,如BASE
基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性——但请注意,这绝不等价于系统不可用
响应时间上的损失:正常情况下,一个在线搜索引擎需要0.5秒内返回给用户相应的查询结果,但由于出现异常(比如系统部分机房发生断电或断网故障),查询结果的响应时间增加到了1~2秒
功能上的损失:正常情况下,在一个电子商务网站上进行购物,消费者几乎能够顺利地完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面
软状态,和硬状态相对,是指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时
最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性
最终一致性是一种特殊的弱一致性:系统能够保证在没有其他新的更新操作的情况下,数据最终一定能够达到一致的状态,因此所有客户端对系统的数据访问都能够获取到最新的值
在没有发生故障的前提下,数据达到一致状态的时间延迟,取决于网络延迟,系统负载和数据复制方案设计等因素
根据 CAP 理论,一致性,可用性和分区容错性最多只能满足两个,因此需要在一致性
和可用性之间做一平衡 NWR 模型是 Amazon 分布式存储引擎 Dynamo 中使用的技术,将
CAP 的选择权交给了用户,让用户自己选择 CAP 中的哪两个。
NWR 模型中:(下文中备份也可以理解为节点)
N = N 个备份,即复制的节点数量
R = 至少读取 R 个备份(成功读操作的最小节点数)
W = 要写入至少 W 份才认为成功(成功写操作的最小节点数)
只需要 W+R > N,就可以保证强一致性
在分布式系统中,一般都要有容错性,所以一般 N>3
W+R > N, 所以 R > N-W 所以读取的份数一定要比总备份数减去确保写成功的节点 的差值要大。根据抽屉原理(是吧?),这个时候的读操作,肯定会读到一个最新的写 操作。
优化写性能(AP)(写多读少) 配置 W=1,N=R 这样,写完一个副本就成功,其他的副 本异步复制即可;而 R=N,那么读取数据的时候需要读全部节点的数据,(这个时候可 能会出现数据冲突,需要用户自行判断冲突数据)。
优化读性能(CP)(读多写少) 配置 W=N,R=1 这时,写完所有的副本才算成功,而读 的时候只需读一个副本即可(只能保证读任意节点都一致,不能保证是最新,此时可能 还没有写成功?)。
应用:如使用 NoSQL 做 cache 等业务的时候(只要写好了就可以读)?
平衡读写性能(AC) 当数据不多,单台能搞定,且不需要容错和扩展性的时候,可以配 置 N=1(只有一份数据),根据公式 W+R>N,则 W=1,R=1。这种情况就简化为单机问 题了。
优点:实现简单
缺点:同步阻塞问题
执行过程中,所有参与节点都是事务阻塞型的。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。
单点故障
由于协调者的重要性,一旦协调者发生故障。参与者会一直阻塞下去。尤其在第二阶段,协调者发生故障,那么所有的参与者还都处于锁定事务资源的状态中,而无法继续完成事务操作。(如果是协调者挂掉,可以重新选举一个协调者,但是无法解决因为协调者宕机导致的参与者处于阻塞状态的问题)
数据不一致
在二阶段提交的阶段二中,当协调者向参与者发送commit请求之后,发生了局部网络异常或者在发送commit请求过程中协调者发生了故障,这回导致只有一部分参与者接受到了commit请求。而在这部分参与者接到commit请求之后就会执行commit操作。但是其他部分未接到commit请求的机器则无法执行事务提交。于是整个分布式系统便出现了数据不一致性的现象
二阶段无法解决的问题
协调者再发出commit消息之后宕机,而唯一接收到这条消息的参与者同时也宕机了。那么即使协调者通过选举协议产生了新的协调者,这条事务的状态也是不确定的,没人知道事务是否被已经提交
含义
NewSQL 是对各种新的可扩展/高性能数据库的简称
具有 NoSQL 对海量数据的存储管理能力
保持了传统数据库支持 ACID 和 SQL 等特性
特点
支持关系数据模型
使用 SQL 作为其主要接口
举例——VoltDB
云数据库
定义:云数据库是指被优化或部署到一个虚拟计算环境中的数据库
库函数:链接到每个客户端
一个 HMaster 主服务器
许多个 HRegion 服务器
一个 HBase 中存储了许多表。每个表都是一个 HRegion 集合,每个 HRegion 包含了位于某个域区间内的所有数据。
具体存储形式请参考闫中敏老师的 ppt
组成:一个 HDFS 集群是由一个 NameNode 和若干个 DataNode 组成
NameNode 作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作
DataNode 管理存储的数据
HDFS
需求:有一张数据表,其中包含手机号码字段
场景:订单查询
这份数据使用过滴滴产品的用户都接触过,就是App上的历史订单
近期订单的查询会落在Redis,超过一定时间范围,或者当Redis不可用时,查询会落在HBase上
WordCount和天气
Redis 是一个 key-value 数据库, 具有极高的并发读写性能,通过 key 迅速查找到 value,但只能通过 key 查询。key-value 很像是我们 java 中学过的map 结构,以“键值对”存储数据,每一个键(key)都会对应一个唯一的值(value), 类似哈希表,可以通过 key 来添加、查询、删除,这样的数据结构性能极高, 扩展性亦良好。 支持的数据类型包括 string、list、set、zset(有序集合)和 hash 。支持 push/pop、add/remove、集合并交差等丰富的操作,而且操作都是原子性的,支持各种不同方式的排序
Redis 使用实例
面向集合存储,易存储对象类型的数据
模式自由
支持动态查询
支持完全索引,包含内部对象
支持查询
支持复制和故障恢复
使用高效的二进制数据存储,包括大型对象(如视频)
自动处理碎片,以支持云计算层次的扩展性
支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言
文件存储格式为BSON(一种JSON的扩展)
可通过网络访问
o 非常适合实时的插入,更新与查询
o 具备网站实时数据存储所需的复制及高度伸缩性
o 适合作为信息基础设施的缓存层
o 避免过载:在系统重启之后,由 Mongo 搭建的持久化缓存层可以避免下
层的数据源过载
o 传统的关系型数据库存储某些数据代价可能会比较昂贵(在此之前,很多
时候程序员往往会选择传统的文件进行存储)
o 非常适合由数十或数百台服务器组成的数据库
o Mongo 的路线图中已经包含对 MapReduce 引擎的内置支持(什么是路线
图?)
o 内置对 MapReduce 引擎的支持
o Mongo 的 BSON 数据格式非常适合文档化格式的存储及查询
如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的
应用程序
o 针对特定问题的 BI 数据库会产生高度优化的查询方式
o 数据仓库可能是更合适的选择
数据采集服务首先对原始数据进行本地缓存,然后再将文件上传至MongoDB私有云,而没有把原始数据直接以键值对形式写入MongoDB私有云
一方面可以有效的保证原始数据的安全性,在很大程度上避免因网络中断,机房断电等异常造成的数据丢失
另一方面,缓存后的文件写入MongoDB,与键值对写入MongoDB相比,前者速度快的多,能更好适应高速采集数据流的大数据处理
利用多台服务器以MongoDB为基础构建了原始采集数据的云存储架构
通过复制集的应用,利用多台机器之间的异步复制达到故障转移和冗余。每三个Mongo服务构成一组复制集,彼此相互进行“心跳”检测,实现数据的高可用性
特点
NoSQL2020-2021期末考试题回忆
https://blog.csdn.net/lwt1597532486/article/details/111999489
选课推荐选闫老师,讲的仔细(虽然没听),并且ppt全面。听说我们实验太多了,就把NoSQL实验推到考完试(都放假一周了)后交,感激…