加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite学习笔记(三)

发布时间:2020-12-13 00:08:12 所属栏目:百科 来源:网络整理
导读:《SQLite学习笔记(三)》要点: 本文介绍了SQLite学习笔记(三),希望对您有用。如果有疑问,可以联系我们。 Journal模式 SQLite3中的事务 SQLite3中可以使用BEGIN TRANSACTION和COMMIT TRANSACTION来开始和停止一个事务.如果你没有添加这些事务语句,SQLit

《SQLite学习笔记(三)》要点:
本文介绍了SQLite学习笔记(三),希望对您有用。如果有疑问,可以联系我们。

Journal模式


SQLite3中的事务

SQLite3中可以使用BEGIN TRANSACTION和COMMIT TRANSACTION来开始和停止一个事务.如果你没有添加这些事务语句,SQLite3会为你的每条SQL语句加上一个事务.

一次正常执行的事务过程

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

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

  • 两次文件写入

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

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

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


初始状态

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

SQLite学习笔记(三)

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


准备读取(加读锁)

SQLite学习笔记(三)

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


读取数据

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

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

SQLite学习笔记(三)


准备改动数据(加写锁)

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

SQLite学习笔记(三)


树立回滚日志

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

SQLite学习笔记(三)


在用户空间中改动数据

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

SQLite学习笔记(三)


冲(fsync)回滚日志文件

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

SQLite学习笔记(三)


加互斥锁

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


写数据库文件

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

SQLite学习笔记(三)


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

SQLite学习笔记(三)

删除回滚日志

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

SQLite学习笔记(三)


开释锁

SQLite学习笔记(三)

非常回滚过程

冲(fsync)数据库文件

SQLite学习笔记(三)


条件检测

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

SQLite学习笔记(三)

  • 存在journal文件

  • journal文件内容不为空

  • 数据库没有reserved锁

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

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


加互斥锁

SQLite学习笔记(三)


文件回滚

SQLite学习笔记(三)


删除回滚日志

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

SQLite学习笔记(三)


开释互斥锁至Share锁

SQLite学习笔记(三)

欢迎参与《SQLite学习笔记(三)》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读