-
申请一个共享锁-线性代数及其应用中文版下载
资源介绍
3.0 单个文件提交
我们着手观察 SQLite 在针对一个数据库文件时,为保证一个原子提交所采取的步骤。关于在多个数据库文件之间
为防止电源故障损坏数据库及保证提交的原子性所采用的技术及具体的文件格式在下一节进行讨论。
3.1 实始状态
当一个数据库第一次打开时计算机的状态示意图如右图所示。图中最右边(”Disk”标注)表示保存在存储设备中的
内容。每个方框代表一个扇区。蓝色的块表示这个扇区保存了原始资料。图中中间区域是操作系统的磁盘缓冲区。
在我们的案例开始的时候,这些缓存是还没有被使用—因此这些方框是空白的。图中左边区域显示 SQLite 用户进
程的内存。因为这个数据库联接刚刚打开,所以还没有任何数据记录被读入,所以这些内存也是空的。
3.2 申请一个共享锁
SQLite 在可以写数据库之前,它必须先读这个数据库,看它是否已经存在了。即使只是只是增加添加新的数据,SQLit
仍然必须从 sqlite_master 表中读取数据库格式,这样才知道如何分析 INSERT 语句,知道在哪儿保存新的信息。
为了从数据库文件读取,第一步是获得一个数据库文件的共享锁。一个“共享”锁允许多个数据库联接在同一时刻
从这个数据库文件中读取信息。“共享”锁将不允许其他联接针对此数据库进行写操作。这是必然的,如果一个联
接在向数据库写入数据的同时,我们去读到信息,也可能读到的一部分数据是修改之前的,而另一部分数据是修改
之后的。这将使得另外联接的修改操作看起来是非原子的。
请注意共享锁只是针对操作系统的磁盘缓存,并非磁盘本身。通常文件锁只是操作系统内核的一些标识(详情要根
据具体的操作系统)。因此,锁会立即消失一旦操作系统崩溃或者停电。当然创建该锁的进程消失,该锁也会随之
而去。
- 上一篇: 最新版SQLite
- 下一篇: ATmega16中文手册.pdf