SQLite学习笔记(三)

SQLite学习笔记(三),第1张

概述介绍《SQLite学习笔记(三)》开发教程,希望对您有用。

《sqlite学习笔记(三)》要点:
本文介绍了sqlite学习笔记(三),希望对您有用。如果有疑问,可以联系我们。
@H_403_5@Journal模式sqlite3中的事务

sqlite3中可以使用BEGIN TRANSACTION和COMMIT TRANSACTION来开始和停止一个事务.如果你没有添加这些事务语句,sqlite3会为你的每条SQL语句加上一个事务.@H_403_5@一次正常执行的事务过程

要想优化sqlite3的性能,那么必需要了解sqlite3中一次事务执行过程.这里已一个有写 *** 作的并成功执行的事务来举例.@H_403_5@

一次文件创立(回滚日志)@H_403_5@

两次文件写入@H_403_5@

两次文件冲入(回滚日志,数据库文件)@H_403_5@

一次文件删除(回滚日志)@H_403_5@

加了3次锁,最后一次不允许读取@H_403_5@

初始状态@H_403_5@

数据库打开后,未进行任何数据库 *** 作时年夜概是下图的状态.@H_403_5@

@H_403_5@@H_403_5@

这里分了三个部分,左面是用户空间,中间是内核缓存区(文件的读写缓存),右边是物理磁盘设备(iOS的闪存).在sqlite中数据最小的读写单位扇区(sector),通常是512B,图中每个小矩形代表一个扇区.蓝色代表未变动的原始数据,中间白色表示是空的,即此时数据没有读取到内核缓存区.@H_403_5@

准备读取(加读锁)@H_403_5@

@H_403_5@@H_403_5@

任何写 *** 作都会先进行读 *** 作,因为写之前要读取数据库的schema,插入和修改的地位等.在读取 *** 作之间要加上读锁.加读锁是为了防止其它数据库连接进行写 *** 作,而保证读取时数据不被破坏.这时其它数据库的读取 *** 作依然可以正常执行.@H_403_5@

读取数据@H_403_5@

加了读锁之后就开端读取数据了:@H_403_5@

这里读取了3个扇区的数据,读取时通过系统文件读取挪用,会从内核缓存中拷贝到用户空间.@H_403_5@

@H_403_5@@H_403_5@

准备改动数据(加写锁)@H_403_5@

数据读取完毕后,就准备开始改动数据了,改动数据之前首先要加写锁,此写锁可以和其它进程的读锁同时存在:@H_403_5@

@H_403_5@@H_403_5@

树立回滚日志@H_403_5@

开始写 *** 作之前,先建立一个回滚日志文件,已便进行回滚 *** 作.将更改之前的旧数据保存到回滚日志文件中.回滚日志文件包括一个头信息(绿色部分),记录回滚必要信息.@H_403_5@

@H_403_5@@H_403_5@

在用户空间中改动数据@H_403_5@

图中粉色表现已修改的数据.@H_403_5@

@H_403_5@@H_403_5@

冲(fsync)回滚日志文件@H_403_5@

用户空间修改数据后,未确保回滚日志文件可靠,必须把回滚日志文件冲入物理磁盘进行持久存储.这样以确保内核瓦解或断电后依然可恢复数据.@H_403_5@

@H_403_5@@H_403_5@

加互斥锁@H_403_5@

准备开端真正的写文件了,要加互斥锁了.互斥锁可以和已经打开的读锁同时存在,但不允许新建读锁了.@H_403_5@

写数据库文件@H_403_5@

现在可以平安的写数据文件了.@H_403_5@

@H_403_5@@H_403_5@

冲数据库文件到持久存储设备.@H_403_5@

@H_403_5@@H_403_5@

删除回滚日志@H_403_5@

冲入数据库文件后才能删除回滚日志,确保内核瓦解或断电后依然可恢复数据.@H_403_5@

@H_403_5@@H_403_5@

开释锁@H_403_5@

@H_403_5@@H_403_5@非常回滚过程

冲(fsync)数据库文件@H_403_5@

@H_403_5@@H_403_5@

条件检测@H_403_5@

回滚必要满足以下所有条件@H_403_5@

@H_403_5@@H_403_5@

存在journal文件@H_403_5@

journal文件内容不为空@H_403_5@

数据库没有reserved锁@H_403_5@

journal文件格局正确,未被归零@H_403_5@

journal文件未指定master journal(若已指定,master journal必需也存在)@H_403_5@

加互斥锁@H_403_5@

@H_403_5@@H_403_5@

文件回滚@H_403_5@

@H_403_5@@H_403_5@

删除回滚日志@H_403_5@

冲入数据库文件后才能删除回滚日志,确保内核瓦解或断电后依然可恢复数据.@H_403_5@

@H_403_5@@H_403_5@

开释互斥锁至Share锁@H_403_5@

@H_403_5@@H_403_5@

欢迎参与《sqlite学习笔记(三)》讨论,分享您的想法,内存溢出PHP学院为您提供专业教程。@H_403_5@ 总结

以上是内存溢出为你收集整理的SQLite学习笔记(三)全部内容,希望文章能够帮你解决SQLite学习笔记(三)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1181715.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存