CMU Database Systems - Two-phase Locking】的更多相关文章

首先锁是用来做互斥的,解决并发执行时的数据不一致问题 如图会导致,不可重复读 如果这里用lock就可以解决,数据库里面有个LockManager来作为master,负责锁的记录和授权 数据库里面的基本的锁类型, 其实就是读锁,写锁 但是如果光是有读写锁,只能解决当个操作互斥和正确,无法解决transaction的正确 所以我们需要一个事务级别的锁,就是2PL,两阶段提交 最核心的想法,在growing阶段需要拿到所有需要的锁,否则就会block:shrinking阶段,不能去增加锁,只能释放锁…
2PL是悲观锁,Pessimistic,这章讲乐观锁,Optimistic,单机的,非分布式的 Timestamp Ordering,以时间为序,这个是非常自然的想法,按每个transaction的时间来排谁先执行 这里会有几个问题,Timestamp是什么,由谁来打,什么时候打上Timestamp 首先每个T需要有一个unique的timestamp,这个在单机很容易实现:其次,Timestamp必须是单调递增的最后,不同的schema会选择在不同的时间给txn打上timestamp,可能是t…
数据库数据丢失的典型场景如下, 数据commit后,还没有来得及flush到disk,这时候crash就会丢失数据 当然这只是fail的一种情况,DataBase Recovery要讨论的是,在各种fail的情况下,如何保证, 1. 已经commit的transaction的数据不丢失:2. 没有部分提交的情况,all or nothing 为了达成这个目的,需要在txn执行的过程中做一些actions保留当时状态,然后在failover后,再执行一系列actions去recover这些状态 F…
并发控制是数据库理论里面最难的课题之一 并发控制首先了解一下事务,transaction 定义如下, 其实transaction关键是,要满足ACID属性, 左边的正式的定义,由于的intuitive的理解其中可能Consistency比较难理解一下,其他都比较直观,对于单机数据库而言consistency其实不是个显著的问题,但对于分布式数据库这就是个主要问题 那么问题就是如何设计让Transaction满足ACID? 一种简单的方法就是,Strawman System 串行执行保障consi…
Database Storage 存储分为volatile和non-volatile,越快的越贵越小 那么所以要解决的第一个问题就是,如果尽量在有限的成本下,让读写更快些 意思就是,尽量读写volatile存储,但是volatile比较很有限,所以需要合理的在两种存储上去swap 但是技术是在飞速的进步的,所以现在有Non-volatile memory 所以最近流行内存数据库,因为当前的memory和磁盘间的IO瓶颈已经消除,所以当前的瓶颈是CPU cache和Memory之前的问题 这个问题…
OLTP scale-up和scale-out scale-up会有上限,无法不断up,而且相对而言,up升级会比较麻烦,所以大数据,云计算需要scale-out scale-out,就是分布式数据库,刚开始肯定是Shared Nothing,但是分布式也引入了更高的架构复杂度和维护成本 所以现在的趋势,是架构分层,层之间是逻辑的scale-up,层内部是物理的scale-out 最终sharing-everything,其实在架构上又回到了scale-up 所以随着硬件的进步和技术的演进,架构…
MVCC是一种用空间来换取更高的并发度的技术 对同一个对象不去update,而且记录下每一次的不同版本的值 存在不会消失,新值并不能抹杀原先的存在 所以update操作并不是对世界的真实反映,这是一种便于应用的简化实现 MVCC的历史可以追溯到70年代,数据库的主流技术大部分都停滞在那个年代 MVCC,可以解决2PC的频繁读写冲突:使用MVCC只有写写才会存在冲突,大大降低了冲突的概率 而且MVCC还能进行time-travel 例子,DB中有Begin,End表示该version生效的时间周期…
正常应用和数据库交互的过程是这样的, 其实我们也可以把部分应用逻辑放到DB端去执行,来提升效率 User-defined Function Stored Procedures Triggers Change Notification User-defined Types Views UDF 用户定义的function,往往用于select中,不会修改数据本身 UDF可以用SQL实现,也可以用外部语言,右边是PG的例子 Stored Procedure 存储过程,可以理解成在数据库上执行一个脚本…
并发执行,主要为了增大吞吐,降低延迟,提高数据库的可用性 先区分一组概念,parallel和distributed的区别 总的来说,parallel是指在物理上很近的节点,比如本机的多个线程或进程,不用考虑通信代价distributed,要充分的考虑通信代价,failover的问题,更为复杂 Process Model 先解释一下概念, process model,指数据库系统架构设计,用于支持多用户的并发请求 worker,用于执行客户端tasks的DBMS组件 通常的process mode…
查询优化应该是数据库领域最难的topic 当前查询优化,主要有两种思路, Rules-based,基于先验知识,用if-else把优化逻辑写死 Cost-based,试图去评估各个查询计划的cost,选取cost比较小的 一个sql query的处理流程, 先是Parser,生成抽象语法树ast,Binder会去做元数据对应,把parse出来的name对应到数据库中的结构,表,字段等 然后Rewriter就是Rules-based的改写,而Optimizer是cost-based的优化 Rela…