Chinaunix首页 | 论坛 | 博客
  • 博客访问: 228001
  • 博文数量: 27
  • 博客积分: 719
  • 博客等级: 上士
  • 技术积分: 386
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-20 21:04
文章分类

全部博文(27)

文章存档

2012年(27)

分类: SQLite/嵌入式数据库

2012-03-22 09:17:14

分析sqlite底层操作对底层的一些读写操作。

j 代表日志文件journal

db 代表数据文件databasefile

w 代表写文件(日志文件或者数据文件)write

r 代表读文件(日志文件或者数据文件)read

d 代表删除文件,基本上只是删除日志文件)delete

l 为长度,删除文件内容的长度length

a 为操作文件内容的起始地址address

 

初始化数据库并创建一个表:

w j:l 512, a 0            //写入日志头,512字节

w j:l 12, a 0              //写入日志magic和在此日志的记录数

w db:l 1024, a 0        //写数据文件第一个页

w db:l 1024, a 1024  //写数据文件第二个页,是创建的表的内容页

d j:l 512, a 0            //删除日志

 

有数据库情况下新建一个表:

r db:l 100, a 0          //读数据文件头100个字节,是关于整个数据库

r db:l 1024, a 0        //判断完前面后,读入第一个页

r db:l 16, a 24          //上层逻辑执行完,写入文件修改次数等

w j: l 512, a 0           //写入日志头,512字节

w j:l 4, a 512            //写入页号,此页号为数据文件页号

w j:l 1024, a 516      //将尚未修改的数据文件第一个页写入日志

w j:l 4, a 1540          //写入检查值,即对日志内容进行检查

w j:l 12, a 0             //日志写完,修改日志头上标记日志个数

w db:l 1024, a 0       //写入修改完的数据库文件第一个页

w db:l 1024, a 2048  //写入新建表的第一个页

d j:l 1544, a 0          //数据库修改完成,删除日志文件

有数据库的情况下查询表

r db:l 100, a 0         //读入数据库前100个字节进行分析

r db:l 1024, a 0       //读入数据库第一个页

向表中插入未溢出的一条记录

r db:l 1024, a 2048 //读数据文件相关页到内存,准备改写

w j:l 512, a 0          //写日志头文件

w j:l 4, a 512          //写入页号,此页号为数据文件页号

w j:l 1024, a 516    //写入尚未修改的数据文件页

w j:l 4, a 1540       //写入检查值

w j:l 4, a 512          //写入页号,此页号为数据文件页号

w j:l 1024, a 516    //写入尚未修改的数据文件页

w j:l 4, a 1540       //写入检查值

w j:l 12, a 0          //日志写完,修改日志头上标记日志个数

w db:l 1024, a 0    //将修改完的数据第一个页写入文件

w db:l 1024, a 2048 //将修改完的数据内容页写入文件

d j:l 2576, a 0       //删除日志文件

 

这是sqlite数据库底层读写的顺序。写日志是很重要的一部分。尚未分析多日志的情况。

阅读(1900) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

龙舌兰柠檬酒2012-03-23 09:52:23

啦哆A梦: e底层操作对底层.....
欢迎指正。

啦哆A梦2012-03-22 22:58:09

e底层操作对底层