写在前面:nosql给我的最大的特点就是太灵活了,灵活到他没有固定的答案,感觉怎么样都行,以至于我复习的时候有种群龙无首的感觉哈哈哈,但成绩还是可以的,这是我最后的背诵的东西,总结了往年题进行整理的,有需要的可以自取~
word版:
链接:https://pan.baidu.com/s/1nateBz8XuUWCM46GyRZ7CQ?pwd=fq98
提取码:fq98
目录
RDB数据库、NoSQL数据库和NewSQL数据库的区别和特点和适用场景
[什么是NWR模型 ?说明在 分布式系统 中如何保证强一致性,高可用性?NWR模型的意义](#什么是NWR模型 ?说明在 分布式系统 中如何保证强一致性,高可用性?NWR模型的意义)
[Hlog是Hbase数据库的一种预先文件日志(Write Ahead Log),说明其工作原理和作用。](#Hlog是Hbase数据库的一种预先文件日志(Write Ahead Log),说明其工作原理和作用。)
nosq的分类和特点


RDB数据库、NoSQL数据库和NewSQL数据库的区别和特点和适用场景

NewSQL: NewSQL是对各种新的可扩展/高性能数据库的简称,具有NoSQL对海量数据的存储管理能力,保持了传统数据库支持ACID和SQL等特性
NewSQL共同特点:支持关系数据模型、使用SQL作为其主要的接口。

RDB(关系型数据库)
**特点:**
-
**数据模型:** 基于关系模型,数据以表格的形式存储,表之间通过关系相互关联。
-
**事务性:** 支持ACID(原子性、一致性、隔离性、持久性)事务,保证数据的完整性和一致性。
-
**查询语言:** 使用SQL(结构化查询语言)进行数据查询和操作。
-
**规范化:** 数据存储采用规范化原则,减少数据冗余。
-
**性能:** 在处理复杂查询和事务性操作时表现良好,但在大规模数据和高并发场景下可能存在性能瓶颈。
-
**可扩展性:** 通常采用垂直扩展(增加单个服务器的资源),水平扩展较为困难。
**代表产品:** MySQL、PostgreSQL、Oracle、SQL Server等。
NoSQL(非关系型数据库)
**特点:**
-
**数据模型:** 不基于关系模型,数据存储格式多样,如键值对、文档、列族、图形等。
-
**灵活性:** 通常不强制数据规范化,允许存储半结构化或非结构化数据。
-
**查询语言:** 没有统一的查询语言,不同NoSQL数据库可能有自己的查询接口。
-
**性能和可扩展性:** 通常在处理大规模数据和高并发场景下表现更好,支持水平扩展。
-
**事务性:** 许多NoSQL数据库不支持ACID事务,或者只提供有限的事务支持。
-
**一致性:** 许多NoSQL数据库采用最终一致性模型,以牺牲一致性为代价提高性能和可用性。
**代表产品:** MongoDB(文档存储)、Redis(键值存储)、Cassandra(列族存储)、Neo4j(图形数据库)等。
NewSQL(新型SQL数据库)
**特点:**
-
**结合关系型和非关系型数据库的特点:** 旨在提供关系型数据库的事务性和SQL支持,同时具备NoSQL数据库的水平扩展能力和高性能。
-
**事务性:** 支持ACID事务。
-
**水平扩展:** 能够通过增加更多的服务器来扩展性能和存储容量。
-
**性能:** 在处理高并发和大规模数据时,性能通常优于传统RDB。
-
**可伸缩性和可用性:** 设计用于云环境和分布式系统,提供高可用性和容错能力。
-
**查询语言:** 通常支持SQL或类似的查询语言。
**代表产品:** Google Spanner、CockroachDB、VoltDB等。
RDB适合需要强事务性(复杂查询、事务处理、约束)和数据完整性的场景,如金融政府应用
NoSQL适合需要高扩展性、灵活性、高速数据读写的应用,如大数据分析、移动应用、互联网应用等。
NewSQL数据库适用于需要支持复杂查询、事务处理、约束和数据完整性,同时又需要高性能、高可用性和可扩展的场景
关系型数据库的优缺点
优点:通用性和高性能 :保持数据的一致性(事务处理)
最小冗余
复杂查询如join
具有成熟的技术
缺:不适合在分布式环境中向外扩展、难以支持高并发读写
- 难以满足大量数据的写入处理
- 表结构变更及建立索引操作困难
- 字段不固定的应用容易产生语义错误
- 无法满足:对简单查询需要快速返回结果的处理
N o SQL 数据库的优势:
- 易于数据的分散
- 提升性能和增大规模
- 模式灵活
- 扩展性好
说明 CAP理论 一致性、可用性、分区容错性分别是啥?说明为什么 CAP 只能同时满足两种性质,不能三者兼容?
理论:一个分布式系统不可能同时满足一致性、可用性和分区容错性,最多只能同时满足两个
一致性(consistency):在分布式系统完成某写操作后任何读操作,都应该获取到该写操作写入的那个最新的值
可用性(availability):一直可以正常的做读写操作(即客户端一直可以正常访问并得到系统的正常响应)。
分区容错性(tolerance of partition):分布式系统重的某个节点或者网络出现故障的时候,整个系统仍然能对外提供满足一致性和可用性的服务,也就是说部分故障不影响整体使用
不能三者兼容的原因:
- 若两个节点出现在不同分区,允许至少一个节点更新状态会导致数据不一致->丧失了一致性
- 若为了保证数据一致性,将分区一侧的节点设置为不可用,那么->丧失了可用性
- 若想同时保证可用性和一致性,则必须两个节点可以互相通信,那么->丧失了分区容错性
( 如果系统选择了一致性和分区容错性,那么在故障发生时,为了保持数据的一致性,
将分区一侧的节点设置为不可用,即拒绝处理请求,也就是丧失了可用性
如果系统选择了可用性和分区容错性,那么在故障发生时,系统可以继续处理请求,但这可能导致数据的不一致性。
如果系统选择了可用性和一致性,那么两个节点之间可以互相通信,那么丧失了分区容错
网络分区,也称为网络分裂或分区容错(Partition Tolerance),是分布式系统和网络理论中的一个概念。它指的是在分布式系统中,由于网络故障或其他原因,系统的不同部分之间可能会失去网络连接,导致它们无法相互通信。)
什么是强一致性,弱一致性,最终一致性?举例
强一致性:1.也叫即时一致性
2.假如A先写入了一个值到存储系统,那么存储系统保证后续A,B,C的读取操作都将返回最新值
3.单副本数据容易保证强一致性,多副本数据需要使用分布式事务协议
弱一致性:1.假如A先写入了一个值到存储系统,存储系统不能保证后续A,B,C的读取操作能读取到最新值
2.不一致性窗口:从 A 写入到后续操作 A,B,C 读取到最新值这一段时间
3.注意:弱一致性不保证可以读到最新的数据值,即使过了不一致性窗口也可能读不到
最终一致性:1.是弱一致性的一种特例
- 假如A先写入了一个值到存储系统,存储系统保证如果在A,B,C后续读取之前没有其他写操作更新同样的值的话,最终所有的读取操作都会读取到A写入的最新值
不一致性窗口:1.是指在分布式系统中,从写操作完成到所有后续读操作都能返回最新更新值之间的时间段。
2.在这个时间段内,系统可能无法立即提供最新更新的数据,从而导致数据的不一致性。
base模型概念
基本可用(basically available)、软状态/柔性事务(soft-state)、最终一致性(eventually
consistency)
基本可用:是指分布式系统再出现不可预知故障的时候,允许损失部分可用性(这并不等价于系统不可用)
软状态/柔性事务: 1.与硬状态相比,允许系统中的数据存在中间状态,并且该状态不会影响系统的整体可用性
2.中间状态指的是允许系统在不同节点的数据副本之间进行数据同步的过程中存在延时
最终一致性: 1.强调系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态,并不需要试试保证系统数据的强一致性
2.是一种特殊的弱一致性
BASE模型和ACID模型的区别

BASE模型完全不同于ACID模型,牺牲高一致性,获得可用性或可靠性。

什么是 NWR 模型 ?说明在 分布式系统 中如何保证强一致性,高可用性?NWR模型的意义
N:副本数(复制的节点数量)
W: 成功写操作的最小节点数
R:成功读操作的最小节点数
- 只需要W+R>N就可以保证强一致性,因为读取数据的节点和被同步写入的节点是由重叠的
- 在分布式系统中,一般都要有容错性,因此N大于3。根据CAP理论,一致性、可用性
和分区容错 性最多只能满足两个,因此需要在一致性和可用性之间做一平衡:
-如果要高的一致性,那么就配置N=W,R=1,这个时候可用性特别是写操作的性能就会大大降低。
-如果想要高的可用性,那么此时就需要放松一致性的要求,此时可以配置W=1,这样使得写操作延迟最低,同时通过异步的机制更新剩余的N-W个节点。
- -几种特殊情况:
①W = 1,R = N ,对写操作要求高性能高可用,高可用性
②R = 1,W = N ,对读操作要求高性能高可用,比如类似cache之类业务,高一致性

- NWR模型的意义 :
1.通过调整N、W、R的值,NWR模型可以在强一致性和最终一致性之间实现动态平衡
2.提高数据可靠性:通过增加数据副本数(N)来提高数据的可靠性。即使某些节点
出现故障或宕机,其他节点上的副本仍然可以提供服务,确保系统的正常运行。
3.灵活应对不同业务需求:。NWR模型允许系统根据具体需求调整N、W、R的值,以满不
同业务场景的需求。例如,对于需要高一致性的业务场景,可以将W和R的值设置为较高
的值;而对于需要高性能的业务场景,则可以将W和R的值设置为较低的值。
4.支持分布式存储系统
举例说明两阶段提交协议的过程。
▲两阶段提交协议是很常见的解决分布式事务的方式,可以保证分布式事务中,要么所有参与的进程都提交事务成功,要么都取消事务,这样做可以在分布式环境中保持ACID中A(原子性)
▲在两阶段提交协议中,包含了两种角色
-参与者就是实际处理事务的机器
-协调者就是其中一台单独的处理分布式事务的机器
▲投票阶段
在请求阶段,协调者将通知事务参与者准备提交或取消事务,然后进入表决过程
在表决过程中,参与者将告知协调者自己的决策:同意(事务参与者本地作业执行成功)或取消(本地作业执行故障)
提交阶段
协调者将基于第一个阶段的投票结果进行决策:提交或取消。当且仅当所有的参与者同意提交事务协调者才通知所有的参与者提交事务,否则协调者将通知所有的参与者取消事务
缺点:同步阻塞、单点故障、数据不一致、二阶段无法解决的问题

Hlog 是 Hbase 数据库的一种预先文件日志( Write Ahead Log ),说明其工作原理和作用。
HLog记录数据的所有变更,一旦数据修改,就可以从HLog中进行恢复,每个HRegionServer维护一个HLog
工作原理:
-
**写前记录**:所有写操作首先记录到HLog中,然后才会写入内存中的Memstore。
-
**顺序写入**:HLog以追加方式顺序写入,提高写入效率。
3.持久化:HLog文件在HDFS上持久化存储,这意味着即使在系统故障的情况下,这些日志文件也不会丢失。
4..**日志滚动**:当HLog达到一定大小或时间限制时,会滚动到新日志,旧日志准备归档。
作用:
-
**保障一致性**:确保系统故障后数据不丢失,保障数据一致性。
-
**提升性能**:减少直接对存储文件的写操作,提高写入性0...............................................能。
-
**灾难恢复**:系统即使发生故障,日志文件也不会丢失,可以通过HLog恢复未持久化的数据。
-
**并发控制**:维护多客户端环境下的数据一致性。
为什么Hbase需要二级索引?
- 若无二级索引,对非rowkey字段的检索和查询硬件资源消耗和时间延迟都会比较高
- 为了让Hbase的数据查询更高效、适应更多的场景,以满足显示中更复杂多样的业务需求