SQLite 多文件事务处理:独立日志与主日志文件
当一个事务涉及多个数据库文件时,SQLite 采取了精细的处理机制,确保数据一致性和可靠性。
独立的回滚日志: 每个数据库文件都拥有独立的回滚日志文件,记录修改页面的原始内容。即使事务涉及多个数据库,每个数据库的锁定和日志记录都是独立进行的,类似于处理单个文件事务。
主日志文件: 为了协调多文件事务,SQLite 引入了“主日志”文件。该文件包含了事务涉及的所有数据库文件的回滚日志文件的路径,并以随机数进行命名,例如 “原始数据库文件名-mjHHHHH”。主日志文件会在创建后立即写入硬盘,确保事务信息的持久化。
事务提交过程:
- 修改数据库页面,将原始内容写入对应的回滚日志文件。
- 创建主日志文件,记录所有涉及的回滚日志文件路径,并立即写入硬盘。
- 将数据库页面的修改内容写入数据库文件。
- 删除所有回滚日志文件和主日志文件,标志着事务的成功提交。
回滚机制:
如果事务在上述过程中发生中断,SQLite 可以通过回滚日志文件和主日志文件恢复数据库到事务开始前的状态,确保数据的一致性。