cmu15-445笔记四 哈希表

哈希表具有无法比拟的常数查询性能,是数据库的常用查询数据结构。

本节课探讨了静态哈希与动态扩容的哈希。动态扩容包括链式哈希、extendible hash以及线性哈希。

哈希表能较好应对多次点查询,但无法较好应对范围查询。

阅读更多

cmu15-445笔记三 缓存池

存储-2

How the DBMS manages its memory and move data back-and-forth from disk.

DBMS是怎么管理其内存的,怎么与硬盘交互的(包括加载和写数据)。

本节课主要介绍缓存池的加载策略、替换策略。

阅读更多

cmu15-445笔记二 存储模型

存储-1

How the DBMS represents the database in files on disk.

DBMS是怎么在底层表示数据的?

本节融合了三节课内容,主要是数据库底层存储的表现,讨论了页中tuple的存储模型,包括两种类型基于tuple和基于log。讨论了具体的数据表示,系统元数据。最后介绍OLTP和OLAP,对应的行存储和列存储优缺点。简单介绍了数据压缩方法。

阅读更多

MIT6824笔记十 Spanner

论文材料: https://pdos.csail.mit.edu/6.824/papers/spanner.pdf

Spanner是谷歌公司研发的、可扩展的、多版本、全球分布式、同步复制数据库。它是第一个吧数据分布在全球范围内的系统,并且支持外部一致性的分布式事务。Spanner实现了一个强大的时间API,用于实现非阻塞的读、不采用锁机制的只读事务和原子模式变更。

Spanner论文比较复杂,这里我结合课程,只重点讲述如何利用时间API完成分布式事务,包括读写事务和只读事务。

1
2
http://loopjump.com/google_spanner/
十问Spanner https://zhuanlan.zhihu.com/p/47870235
阅读更多

MIT6824笔记十 分布式事务

本节介绍了分布式事务,如何进行并发控制和原子提交,主要是2PL和2PC。

2PL区别于简单锁,事务锁数量是动态增长的,并在事务commit或abort之后才能释放锁。2PC其实有3阶段,包括inform、prepare、commit阶段。每一阶段为了防止数据丢失都要进行Write Ahead Log操作。每个服务器也要维护各自的锁表单,用来记录当前锁被哪个事务持有。

阅读更多

CSAPP第八章信号部分

信号基本含义

linux中信号就是一段消息,通知进程发生了某些事情,类比软件层面的异常(软中断)。

信号是一种软件形式的异常,允许进程和内核中断其他进程,可以用来通知用户进程发生了某些异常

阅读更多