这期内容当中小编将会给大家带来有关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模块实现了存储的持久性和事务的原子性。
上述就是小编为大家分享的SQLite Database System Design and Implemention Pager Module的概述是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。