本文主要是介绍lightning mdb 源代码分析(5)-事务控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本博文系列前面已经探讨了LMDB的系统架构、MMAP映射、B-Tree操作等部分,本文将尝试描述LMDB中的事务控制的实现。
事务的基本特征:
事务是恢复和并发控制的基本单位。它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
LMDB中的实现基本思路:
Atom(A):LMDB中通过txn数据结构和cursor数据结构的控制,通过将脏页列表放入dirtylist中,当txn进行提交时再一次性统一刷新到磁盘
中或者abort时都不提交保证事务要不全成功、要不全失败。对于长事务,若页面spill到磁盘,因为COW技术,这些页面未与整棵B-T
这篇关于lightning mdb 源代码分析(5)-事务控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!