SQLite页面管理

1 页面管理器:是访问本地数据库和日志的唯一模块(通过操作系统API)。它把随机访问系统或面向字节的文件系统抽象成数据库文件(基于页的随机访问系统)。它定义了一套与文件系统无关的接口来访问数据库文件。B树使用页面管理模块的接口访问数据库,而非直接访问数据库或日志文件。B树把数据库文件视为大小均匀的逻辑队列。除内存数据库外,一般的数据库都是把数据库文件存在于磁盘上,用的时候读入内存,操作之,有需要的话再写回内存。一般情况下,数据库文件会比较大。有因为内存有限,所以在内存中只保持一小快的数据库文件,这块内存叫做database cache或data buffer,在SQLite中叫做page cache。

对于每一个数据库文件,在文件和缓存之间移动页面是页面管理器的基本功能。移动页面对B+树和其他高层模块是透明的。页面管理器是文件系统与这些高层模块的中间人,是的这些模块可以直接访问页面内容,也负责把页写回数据库文件。他建立其了一个抽象,数据库就是主存中的页的队列。页面管理器也提供了其他功能:事务管理(实现ACID,并发的控制和恢复,原子的提交和回滚),数据管理(协调数据库文件到缓冲区的页的读写,文件空间管理),日志管理(向日志文件写入记录),锁管理(确保事务在访问文件之前已经获得对数据库文件的相应的锁)。总之,页面管理实现了存储的持久性和事务的原子性。

上层模块完全从低级别的锁和日志管理机制绝缘,他们不知道锁和日志的活动。B+树只看到每个事务的级别,不管具体实现。页管理器把一个事务拆分成锁操作,日志操作,对数据库文件的读写操作。B+树以页号请求一个页,页管理器返回一个指向已加载到缓冲区的页的内容的指针。在对页改动时,B+树模块通知页管理器在日志文件里保存相应的信息以应对可能的恢复,并且要获得对相应数据库文件的锁。B+树在用完一个页时通知页管理器,如果页面被更改,则写回文件。

2 页面管理器接口结构:实现了名为Pager的数据结构,每个打开的数据库文件对应着唯一一个Pager对象,数据库文件和Pager对象几乎等价。B+树想用一个数据库文件时,就新建一个Pager对象,使用对象的句柄对文件进行操作。页模块用句柄跟踪关于文件的锁,日志文件,数据库的状态,日志状态等。

3 缓存管理:SQLitre为每个打开的数据库文件维护一个单独的页缓冲区。如果一个线程两次或多次打开相同的文件,页管理器只会对第一个打开调用建立单独的页缓冲区。内存数据库内存数据库不设计任何外部设备,但是他们也被像本地文件一样对待,全部都在缓冲中。因此,B/B+树用相同的接口来访问数据库。

页缓冲区位于应用程序的内存空间。相同的页也可能被操作系统所缓存。当应用程序要读任意文件的内容时,操作系统先用自己缓存的备份,再用应用程序的缓存备份。SQLite的页缓冲和区的组织和管理是独立于操作系统的。页面缓存的管理是系统性能的关键。

3.1 缓冲区组织:为了加快搜索缓存速度,内存中缓存项目都会有比较好的组织。SQLite用哈希组织缓存页,用页槽存储表中的页。缓冲区是全相连的,即任何槽可以存储任何页面。哈希表最初是空的,页面管理器创建了新的槽并把其插入哈希表中。一个缓冲区能存储的槽有个最大值,而内存数据库中无限制(只要操作系统允许应用程序的用户空间增长)。

哈希表中的每一页都有一个PgHder类型的对象,接着是page image,接着是一些私有数据(B+树用来存储页面具体控制信息)。内存数据库没有日志文件,所以他们的恢复信息被记录在内存对象中。指向这些对象的指针指向这些对象的指针在私有内容之后,这些指针被页管理其使用。当页管理器把页调入缓冲区时,被初始化为零。在缓冲区的所有的页面都可以通过哈希表访问,

时间: 2025-01-02 14:44:16

SQLite页面管理的相关文章

tomcat web页面管理应用配置

大部分时候,我们的tomcat服务器都不是部署在本机,那么怎么样不通过ftp/sftp方式来将war包部署到tomcat容器呢? tomcat有提供web页面管理应用的功能. 我们来看看怎么配置实现该功能. 进入tomcat默认页面时有"server status"."manager app"."Host manager"三个选项如图: 图1 默认情况下,点击会跳转到401 Unauthorized报错页面 图2 错误信息有提示请检查conf/t

SQLite 客户端管理工具

SQLite 客户端管理工具 SQLite Expert Personal 3.5.79.2499 下载地址:http://www.onlinedown.net/soft/117987.htm SQLite数据库学习网站: http://www.yiibai.com/sqlite/sqlite_truncate_table.html

08:图形页面管理监控

1.单价docker图形页面管理: Portainer是一个开源.轻量级Docker管理用户界面,基于Docker API,可管理Docker主机或Swarm集群,支持最新版Docker和Swarm模式. 1.1.创建卷 # docker volume create portainer_data 1.2.创建Portainer容器 # docker run -d \-p 9000:9000 \-v /var/run/docker.sock:/var/run/docker.sock \-v por

SQLite内存管理

SQLite没有直接调用C库的malloc函数,而是自己实现了内存管理的方式,众所周知,C/C++的代码有两方面的瓶颈:性能(内存以及算法).内存管理代码主要分布在malloc.c文件中. 最最有意思的是该函数: void *sqlite3DbMallocRaw(sqlite3 *db, u64n) 或许lookasize的基本观念,内存是如何分配的,我们是应该封装,还是简单使用,这是一个难题!!

HAProxy 之 页面管理配置

1  概述 HAPorxy自带管理页面,通过一定的配置后开启页面功能,即启用统计接口.默认该页面只能查看,不能进行配置修改,启用statspage中的管理功能 2  配置介绍 统计接口启用相关的参数, 可以配置在frontend配置段里或者将配置独立出来,放到listen里,独立设置监听端口 开启统计接口启用相关的参数 stats   enable 启用统计页:基于默认的参数启用stats page,有以下三个默认值 -stats uri: 默认值/haproxy?stats  ,浏览器输入 h

SQLite可视化管理工具汇总

版权声明:本文为博主原创文章,未经博主允许不得转载. 搜集了一些SQLite工具,在这里做个总结,有的工具用的多一些,有的只是简单试用,甚至未试用,所以有描述不当的还请回复指正,也欢迎补充完善! 2015-03-11 更新情况: SQLiteSpy最新版本1.9.8,重大改变,支持db拖拽 SQLiteStudio最新版本3.0.3,重大改变,打开数据量较大的数据库速度明显改善,还有count查询,堪比SQLiteExpert SQLiteExpert 最新版本3.5.76,相信也更好用了,尚未

SpringSide的页面管理

SpringSide的开发框架,我们可以给所有的页面配置一个公共的footer和header的,如果想让某个页面单独显示,而不需要footer和header,那么你可以在WEB-INF下面的views下面的decorators.xml文件中进行配置,具体如下: <?xml version="1.0" encoding="UTF-8"?> <decorators defaultdir="/WEB-INF/layouts/">

Extjs页面管理

1.extjs4 作为前段框架,封装grid window form treegrid等.2.EF codefirst作为orm底层.3.使用ioc 依赖注入作为程序注入.4.使用aop作为权限.日志.异常的拦截.避免程序中大量使用日志权限异常代码.5.面向接口的服务,使用泛型模板作为数据操作.6.使用log4net作为日志底层.7.良好的权限控制,可判断前台操作跟后台权限操作.8.使用NPOI作为excel操作框架.9.权限基于反射,根据特性判断哪些可以控制权限.10.linq扩展,可查询多w

docker:轻量级图形页面管理之Portainer

1.介绍 docker 图形化管理提供了很多工具,有Portainer.Docker UI.Shipyard等等,本文主要介绍Portainer. ?Portainer是一个开源.轻量级Docker管理用户界面,基于Docker API,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控制台操作.Swarm集群和服务等集中管理和操作.登录用户管理和控制等功能.功能十分全面,基本能满足中小型单位对容器管理的全部需求. 2.创建