并发控制
1、数据库中为什么要并发控制?并发控制技术能保证事务的哪些特性?
数据库时共享资源,通常有多个事务同时执行。当多个事务同时并发地存取时就会产生同时读/写同一个数据。若对并发操作不加以控制就可能导致存取不正确的数据,破坏事务的一致性。
并发控制保证了事务的一致性和隔离性
2、并发操作会产生哪几类数据的不一致?用什么方法可以避免
1)丢失修改,两个事务对同一个数据同时进行修改,那么就会有一个事务的操作被另一个事务的修改覆盖掉。
2)不可重复读,一个事务读了某一数据以后,另一个事务对其进行了更新操作,那么再次读的时候就会得到与上次不一样的数据。
3)读取脏数据,一个事务修改了某一数据并把其写回磁盘,另一个事务读取了这个数据以后,之前那个事务因为某种原因撤销了。
避免不一致性的方法就是并发控制,常用的并发控制有*法、时间戳法、乐观控制法、多版本并发控制法等
3、*和*的类型
*就是事务 T 对某一数据进行操作前,先向系统发送请求,对其加锁,加锁以后事务就对这个数据有了一定的控制权,在事务 T 释放锁之前,其他事务不能对该数据进行更新或者读取
*类型有:排它锁、共享锁
4、 三级协议分别能解决哪些问题
加 X 锁,直到事务结束再释放。解决了丢失修改问题。
在 1 基础上加 S 锁,读完后可以释放,解决了读取脏数据的问题。
在 1 基础上加 S 锁,直到事务结束再释放,解决了不可重复读问题
5、活锁、活锁产生原因和解决办法
当一系列*操作无法按照其正确顺序执行时,就可能导致事务无限等待某个*。
避免活锁的方法就是使用 FCFS
6、死锁、死锁的解决办法
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。这些永远在互相等待的进程称为死锁进程。
防止死锁的方法有两种:预防死锁、死锁诊断与解除
预防死锁有两种办法:一次*法、顺序*法
死锁诊断与解决:超时法、事务等待图法
解除法:选择处理死锁代价最小的事务,将其解除
7、什么样的并发调度是正确的调度
可串行化的并发调度是正确的调度。可串行化调度定义:多个事务并发执行是正确的,当且
仅当其结果与按某一次序执行的串行执行的结果相同。
8、如何保证并发调度的正确性
冲突可串行化,使用两段锁协议
NoSQL 和 New 数据库
自 1970 年以来,数据库技术发展到了第四代,第一代是 60~70 年早期的层次和网状数据库系统,第二代是 70 年代中期开始的关系数据库系统,第三代是 80 年出现的对象数据库系统和以及 90 年出现的对关系模型进行扩展,使关系数据库系统具有面向对象功能。
自 2000 年以来,Web 技术、社交网络、移动计算和物联网的进步导致全球范围应用程序生成的半结构化、非结构化数据呈现爆炸式增长势态,此类应用程序产生了各种不同的需求,包括水平可扩展能力、支撑大规模海量数据处理能力,系统要具有高可用性和容错能力以应对硬件和软件故障,并且可以通过利用额外资源响应客户端请求,从而提高查询处理速率,这就导致了第四代数据库技术 NoSQL 和 NewSQL 技术的出现。
NoSQL 数据库的关键特征是:(1)采用图形、树、键值、文档等表格模型以外的数据模型;(2)数据库设计时没有固定的模式定义;(3)提供对水平可扩展性的隐式支持;(4)具有最终一致性而不是强一致性。NoSQL 的另一个重要概念是 CAP 定理,它对分布式系统至关重要的属性提供了一些约束,即:一致性、可用性和分区容错性。CAP 定理表明,分布式系统在任何给定时间最多只能满足其中 2 个属性。
NewSQL 是最新一代的数据库系统,它不仅提供 NoSQL 数据库系统具有的可扩展性和可
用性,还保留了传统关系数据库的 ACID 特性、关系数据模型和 SQL 查询语言