从9月中旬开始的PostGreSQL代码阅读+MVCC,至今总算告一段落。此次分析,既有意料之中,亦有出乎意料。意料之中的是过程复杂曲折,意料之外的是PostGreSQL的MVCC实现居然如此简单。
具体地说,在PG中,多版本的每个版本的tuple都被视作一个新的单独的tuple,进行插入。删除tuple时则直接将tuple标记为删除。Update==delete+insert。
所有的tuple都在heap中进行操作,每次加入新的tuple或新版本的tuple时更新index。索引中,每个版本的tuple都有对应的链接项。
对于已经过期的tuple,由vacuum程序进行物理删除,并更新相应的index。
所有实现如上。
注:tuple标记为删除的方式,实际上就是更新tuple的ExpiredID,关于CreateID和ExpiredID,可见我的另一篇日志:PostGreSQL之MVCC代码分析概览。
相关文章:
- PostGreSQL之MVCC代码分析 MVCC(多版本并发控制)是数据库中用以实现事务Lock-Free的方式之一。相对于传统的两段锁等方式的事务并发处理机制,MVCC在读写同时操作时并不需要加锁,而只在两个写操作同时进行时,才加一个互斥锁。其实现思想是展示给每个事务该事务开始时数据库的快照。继续阅读 »...
- The 200th 这是本博客的第200篇日志。距离大树底下博文过百已经过去了将近一年。 我本以为,这一次不会再有刚过百时那种激动和喜悦,但当日志更新到第197篇的时候,我的心里居然开始忐忑,有一种难明的情绪在心里,不是波涛汹涌,但也难以抑制。我想,可能不是因为博客本身,而是因为大树底下见证了过去一年的生活。继续阅读 »...
- [转载]一种理想的在关系数据库中存储树型结构数据的方法 理想中的树型结构应具备哪些特点呢?数据存储冗余小、直观性强;方便返回整个树型结构数据;可以很轻松的返回某一子树(方便分层加载);快整获以某节点的祖谱路径;插入、删除、移动节点效率高等等。带着这些需求我查找了很多资料,发现了一种理想的树型结构数据存储及操作算法,改进的前序遍历树模型(The Nested Set Model)。继续阅读 »...
1 条评论。