SQLite版本3中的文件锁定和并发(七)

  返回: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 锁定

从单个进程的角度来看,数据库文件 可以处于以下五种锁定状态之一:

解 锁 数据库上不保留任何锁。数据库可能既不能读取,也不能 写。任何内部缓存的数据都被视为可疑数据,并受 在使用之前对数据库文件进行验证。其他 进程可以读取或写入数据库作为自己的锁定状态 许可证。这是默认状态。
共享 可以读取数据库,但不能写入数据库。任意数量的 进程可以同时持有 SHARED 锁,因此可以有 许多同时阅读器。但不允许使用其他线程或进程 在一个或多个 SHARED 锁处于活动状态时写入数据库文件。
保留 RESERVED 锁表示进程正计划写入 数据库文件,但它目前只是 从文件中读取。一个只能有一个 RESERVED 锁处于活动状态 时间,但多个 SHARED 锁可以与单个 RESERVED 锁共存。 RESERVED 与 PENDING 的不同之处在于可以获取新的 SHARED 锁 而有一个 RESERVED 锁。
待定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

界忆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值