返回:SQLite—系列文章目录
上一篇:自己编译SQLite或将SQLite移植到新的操作系统(六)
下一篇:SQLite—系列文章目录
正文:
1.0 SQLite 版本 3 中的文件锁定和并发
SQLite 版本 3.0.0 引入了新的锁定和日志功能 旨在提高 SQLite 版本 2 的并发性的机制 并减少作家的饥饿 问题。新机制还允许交易的原子提交 涉及多个数据库文件。 本文档介绍新的锁定机制。 目标受众是想要理解和/或修改的程序员页面代码和审阅者致力于验证设计 的 SQLite 版本 3。
2.0 概述
锁定和并发控制由页面模块处理。 页面模块负责使 SQLite 成为“ACID”(原子、 一致、隔离和持久)。页面模块确保更改 一下子发生,要么所有的变化都发生,要么没有一个发生, 两个或多个进程不尝试访问数据库 同时以不兼容的方式,并且一旦发生了变化 书面的它们会一直存在,直到被明确删除。页面还提供磁盘文件某些内容的内存缓存。
页面不关心 以及 B 树、文本编码、索引等的详细信息。 从页面的角度来看,数据库由大小均匀的块的单个文件。每个块称为 “page”,大小通常为 1024 字节。页面已编号 从 1 开始。因此,数据库的前 1024 个字节被称为 “第 1 页”和第二个 1024 字节称为“第 2 页”,依此类推。都 其他编码细节由库的更高层处理。 页面使用以下几种之一与操作系统进行通信模块 (例如: os_unix.c、 os_win.c) 这为操作系统服务提供了统一的抽象。
页面模块有效地控制对单独线程的访问,或者单独的进程,或两者兼而有之。在本文档中,每当 写有“进程”一词,您可以用“线程”一词代替,而不使用 改变陈述的真实性。
3.0 锁定
从单个进程的角度来看,数据库文件 可以处于以下五种锁定状态之一: