大树底下
下面可以乘凉的不一定是大树,但大树底下一定是可以乘凉的。
-
PostGreSQL之MVCC分析终结篇
Posted on 十月 15th, 2009 No comments从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代码分析概览。
如果喜欢这样的文章,不妨订阅我吧·!
相关文章:
- 尼古拉·特斯拉 尼古拉·特斯拉(Nikola Tesla,1856年7月10日-1943年1月7日)是世界知名的发明家、物理学家、机械工程师和电机工程师。塞尔维亚血统的他出生在克罗地亚(后并入奥地利帝国)。特斯拉被认为是历史上一位重要的发明家。他在19世纪末和20世纪初对电和磁性的贡献也是知名的。他的专利和理论工作形式依据现代交变电流电力(AC)的系统,包括多相电力分配系统和AC马达,帮助了他带起第二次工业革命。 在美国,特斯拉在历史上或通俗文化上的名声可以媲美任何其他的发明家或科学家。1893年他展示了无线通讯并成为了电流之战的赢家之后,就成为了美国最伟大的电子工程师之一而备受尊敬。许多他早期的成果变成现代电子工程的先驱,而且他的许多发现为开创性的重要。在1943年,美国最高法院承认他为无线电的发明者。特斯拉从不在意他的财务状况,在穷困且被遗忘的情况下去世,享年86岁。 在使用电的现代世界上到处都可以看见特斯拉的遗产。撇开他在电磁学和工程上的成就,特斯拉也被认为对机器人、弹道学、资讯科学、核子物理学和理论物理学上等各种领域有贡献。特斯拉晚年被视为一个疯狂科学家并由于宣称可以创造怪异的科学发明而被注意。[1][2] 许多他的成就已伴随着一些争议被应用,去支持着许多的伪科学,如幽浮理论和新世纪神秘理论。特斯拉当代的钦佩者视他为“创造出二十世纪的人”[3]。 ...
- [转载]一种理想的在关系数据库中存储树型结构数据的方法 理想中的树型结构应具备哪些特点呢?数据存储冗余小、直观性强;方便返回整个树型结构数据;可以很轻松的返回某一子树(方便分层加载);快整获以某节点的祖谱路径;插入、删除、移动节点效率高等等。带着这些需求我查找了很多资料,发现了一种理想的树型结构数据存储及操作算法,改进的前序遍历树模型(The Nested Set Model)。...
- PostGreSQL之MVCC代码分析 MVCC(多版本并发控制)是数据库中用以实现事务Lock-Free的方式之一。相对于传统的两段锁等方式的事务并发处理机制,MVCC在读写同时操作时并不需要加锁,而只在两个写操作同时进行时,才加一个互斥锁。其实现思想是展示给每个事务该事务开始时数据库的快照。...
- PostGreSQL之MVCC代码分析(1):概览 Transaction启动时形成快照就是要记录该Transaction可见的TransactionID,排除不可见的ID。PostGreSQL中每一个版本的数据有两个ID,其中一个是CreationID即插入该数据的TransactionID,一个是ExpiredID,即删除或更新该数据的TransactionID。对一个Transaction可见的数据的ID要满足以下条件: 1.CreationID当前TransactionID或ExpiredID不存在 Transaction启动形成快照的过程: 遍历当前所有活动的Transaction,记录在一个活动Transaction的ID数组中;根据Transaction的先后顺序,选择当前Transaction可见的最小TransactionID,记录在xmin,选择可见的最大TransactionID,记录在xmax中。 PostGreSQL8.5中进行最终的版本选择是在从外存中获取一个页面的数据之后,由一个检验函数(HeapTupleSatisfiesMVCC等一系列函数)检验所有该页面数据的数据对当前Transaction的可见性,如果不可见,则将数据除去,最后返回所有可见数据。...
- 萨缪尔·摩尔斯 萨缪尔·芬利·布里斯·摩尔斯(Samuel Finley Breese Morse)(1791年4月27日-1872年4月2日),美国发明家,摩尔斯电码的创立者。...
技术 MVCC, PostGreSQL, 推荐Leave a reply

滔滔不绝