SQLite Database System Design and Implemention Pager Module 概述

经过阅读本节,你应当可以解释解释如下问题:数据库

1.page cache是什么?为何须要它?谁在使用它?
2.通常的缓存管理技术
3.SQLite采用的事务处理过程以及回滚过程数组

本章讨论了pager模块,该模块在原生的字节文件上实现了抽象的数据库页文件系统,扮演着 固定大小的数据页面的管理者,定义了从数据库文件中获取
这些页面的接口。它经过提供对数据文件的内存层面上的缓存来帮助Tree模块加速获取数据库页面,也就是说它管理着页面缓存。它仍是事务管理器,该事务实现了ACID特性经过并发访问控制和失败回滚的处理。
它使并发控制和回滚操做对Tree和其余更高的模块彻底透明。它仍旧扮演者锁和日志管理者的角色。事实上,pager模块实现了通常数据库管理系统中的持久性。缓存

除了内存数据库以外,数据库都位于外部存储器好比磁盘,用原始的文件存储着。
SQLite不能高效的获取以及控制数据在磁盘上。
当SQLite须要数据的时候,它从数据库文件中将其读取到主存中,在内存中控制该数据,而且在有须要的时候,将该数据写回到数据库文件中。
通常来讲,数据库文件的总的大小比可用的内存大小大得多。因为有限大小的的主存,仅仅一部份内存预留给数据库文件,这个比例对整个数据库文件来说,很小,而且这个预留的内存空间一般叫作数据库缓存或者数据缓冲区;在SQLite的术语中,它被称做page cache.这个缓存位于应用处理的地址空间,不是位于操做系统的空间。操做系统拥有本身的数据缓存。并发

在SQLite当中page缓存管理器被叫作pager。操作系统

该模块面向的是下层的以字节为单位的普通的原生文件,而且转换他们成为能够随机访问的高层面上的以page为单位的文件,这些page都是固定大小的对象,都是从原生的文件系统中读出。日志

不一样层次的文件能够有不一样page大小。
pager为读取这些数据库文件定义了独立于文件系统的能够方便使用的接口。
tree模块直接位于pager模块的上层,从始至终都在使用pager模块提供的接口访问数据库,从不直接访问任何数据库文件或者日志文件。tree模块面对的数据库文件就像一个统一大小的page组成的逻辑数组同样,而且访问这些page经过他们的下标。对象

SQLite中美国也你打开的数据库文件也能够说是数据库连接都维护着一个独立的page缓存。
当一个应用程序打开一个数据库文件的时候,pager模块就会为这个文件建立而且初始化一个新的page缓存
若是该程序打开相同的数据库文件两次或者更多的次数,在默认的处理模式中,pager建立而且初始化一样多的独立的page 缓存为这个数据库文件。接口

SQLite支持一个高级特性,该特性支持全部打开同一个数据库的连接共享一样的page 缓存,该文件可能被相同的或者不一样的数据库连接打开了屡次。
在内存型数据库中,没有任何数据指向外部存储区,可是,他们也是一样的经过pager来处理和保存数据。所以,tree 模块使用一样的接口来获取不一样类型的数据库。事务

pager 是SQLite中层次最低的模块。它是惟一的经过原生的操做系统提供的IO 接口访问原生数据文件和日志文件的模块。内存

他直接读取和写数据库文件以及日志文件。
他不理解数据是如何在数据库中组织存放的。他也不与数据库中的内容进行交互,不会本身对数据内容进行修改。
他仅仅保证不管什么信息在数据库文件中存储着,都能重复的获取不用任何转换。
在某种意义上,pager是一个被动的实体。
虽然它可能会修改数据库文件的一些头信息,好比文件的变化次数。
他将对数据库文件的操做工做从通常的随机访问的字节形式的文件系统,抽象成一个随机访问的页面系统。
他定义了一套易于使用,独立于文件系统接口的能够随机访问数据库文件页面的接口。

对每一个数据库文件来讲,在数据库文件与内存之间移动page是pager做为缓存管理器的基础功能。
这个页面移动是透明的对于tree和更高层面的模块。
pager是一个原生文件系统和高层次模块之间的媒介。
他的主要目的就是使数据库页面在内存中是能够寻址的,从而使这些模块能直接访问内存中的页面内容。
他还定位了写页面回数据库文件的位置。
他创造了一个抽象的概念,数据库文件是以数组形式的页面存放于内存中的,tree和pager两个模块经过定义良好的页面访问协议一块儿工做。

除了缓存管理工做,pager还承担了不少其余不少的一个典型数据库管理系统应该具备的功能。
他提供了典型的事务处理系统的核心服务:事务管理,数据管理,日志管理和锁管理

做为一个事务管理器,他实现了事务的ACID特性经过管理并发空调制和回滚操做。 他而且负责了原子性的提交和事务回滚。 做为一个数据管理器,他定位读和写数据库文件经过内存中的缓存页面,而且负责文件空间管理工做。 做为一个日志管理器,他实现了往日志文件中写日志记录。 做为一个锁管理器,他保证了事务在获取一个数据库页面以前,已经拥有了数据库文件上的合适的锁。 在本质上说,pager模块实现了存储的持久性和事务的原子性。

相关文章
相关标签/搜索