本节课主要介绍数据库系统的一些概念以及SQL语句。
本节课主要介绍数据库系统的一些概念以及SQL语句。
论文材料: https://pdos.csail.mit.edu/6.824/papers/spanner.pdf
Spanner是谷歌公司研发的、可扩展的、多版本、全球分布式、同步复制数据库。它是第一个吧数据分布在全球范围内的系统,并且支持外部一致性的分布式事务。Spanner实现了一个强大的时间API,用于实现非阻塞的读、不采用锁机制的只读事务和原子模式变更。
Spanner论文比较复杂,这里我结合课程,只重点讲述如何利用时间API完成分布式事务,包括读写事务和只读事务。
1 | http://loopjump.com/google_spanner/ |
本节介绍了分布式事务,如何进行并发控制和原子提交,主要是2PL和2PC。
2PL区别于简单锁,事务锁数量是动态增长的,并在事务commit或abort之后才能释放锁。2PC其实有3阶段,包括inform、prepare、commit阶段。每一阶段为了防止数据丢失都要进行Write Ahead Log操作。每个服务器也要维护各自的锁表单,用来记录当前锁被哪个事务持有。
本节介绍了一个事务的基本实现方式以及Aurora。
对于Aurora,值得注意的是6个副本3个中心的设计,以及Quorum的读写思想。还有就是违背抽象,设计耦合的日志专用存储能极大提升性能。
文件系统的试验比较简单,第一个实验是扩展文件大小,第二个实验则是实现软链接。
MIT6.S081 lab6 Copy-on-Write Fork
There is a saying in computer systems that any systems problem can be solved with a level of indirection.
任何计算机系统的问题都可以通过增加一个中间层解决。
COW的思想就是fork时child的PTE指向parent的Physical Page,这样一个PP两个进程共同使用。等到真正要使用时,再拷贝一份出来,避免冲突。需要注意,fork可能在fork,于是一份物理页面可能不止两个进程共享,于是我们需要为每个物理页面额外维护一个引用计数。