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数据库底层读写的顺序。写日志是很重要的一部分。尚未分析多日志的情况。