SQLite剖析之锁和并发控制】的更多相关文章

在SQLite中,锁和并发控制机制都是由pager.c模块负责处理的,用于实现ACID(Atomic.Consistent.Isolated和Durable)特性.在含有数据修改的事务中,该模块将确保所有的数据修改全部提交,或者全部回滚.与此同时,该模块还提供了一些磁盘文件的内存Cache功能.    事实上,pager模块并不关心数据库存储的细节,如B-Tree.编码方式.索引等.它只是将其视为由统一大小(通常为1024字节)的数据块构成的单一文件,其中每个块被称为一个页(page).页的起始…
一.概述: 在SQLite中,锁和并发控制机制都是由pager_module模块负责处理的,如ACID(Atomic, Consistent, Isolated, and Durable).在含有数据修改的事务中,该模块将确保或者所有的数据修改全部提交,或者全部回滚.与此同时,该模块还提供了一些磁盘文件的内存Cache功能.    事实上,pager_module模块并不关心数据库存储的细节,如B-Tree.编码方式.索引等,它只是将其视为由统一大小(通常为1024字节)的数据块构成的单一文件,…
前言 事务处理是DBMS中最关键的技术,对SQLite也一样,它涉及到并发控制,以及故障恢复等等.在数据库中使用事务可以保证数据的统一和完整性,同时也可以提高效率.假设需要在一张表内一次插入20个人的名字才算是操作成功,那么在不使用事务的情况下,如果插入过程中出现异常或者在插入过程中出现一些其他数据库操作的话,就很有可能影响了操作的完整性.所以事务可以很好地解决这样的情况,首先事务是可以把启动事务过程中的所有操作视为事务的过程.等到所有过程执行完毕后,我们可以根据操作是否成功来决定事务是否进行提…
一.7种临时文件    SQLite中,一个数据库由单个磁盘文件构成,简化了SQLite的使用,因为移动或备份数据库只要拷贝单个文件即可.这也使得SQLite适合用作应用程序文件格式.但是,当在单个文件中存储一个数据库时,SQLite会在处理数据库的过程中使用许多临时文件.    SQLite目前使用7种不同类型的临时文件:    * 回滚日志(Rollback journals)    * 主日志(Master journals)    * SQL语句日志(Statement journals…
1事务 事务定义了一组SQL命令的边界,这组命令或者作为一个整体被全部执行,或者都不执行.事务的典型实例是转帐. 2事务的范围 事务由3个命令控制:BEGIN.COMMIT和ROLLBACK.BEGIN开始一个事务,之后的所有操作都可以取消.COMMIT使BEGIN后的所有命令得到确认:而ROLLBACK还原BEGIN之后的所有操作.如: sqlite> BEGIN; sqlite> DELETE FROM foods; sqlite> ROLLBACK; sqlite> SELE…
由于sqlite对多进程操作支持效果不太理想,在项目中,为了避免频繁读写 文件数据库带来的性能损耗,我们可以采用操作sqlite内存数据库,并将内存数据库定时同步到文件数据库中的方法. 实现思路如下: 1.创建文件数据库: 2.创建内存数据库(文件数据库.内存数据库的内部表结构需要一致): 3.在内存数据库中attach文件数据库,这样可以保证文件数据库中的内容在内存数据库中可见: 4.对于insert.select操作,在内存数据库中完成,对于delete.update操作,需要同时访问内存.…
1.异步I/O模式    通常,当SQLite写一个数据库文件时,会等待,直到写操作完成,然后控制返回到调用程序.相比于CPU操作,写文件系统是非常耗时的,这是一个性能瓶颈.异步I/O后端是SQLite的一个扩展模块,允许SQLite使用一个独立的后台线程来执行所有的写请求.虽然这并不会减少整个系统的资源消耗(CPU.磁盘带宽等),但它允许SQLite在正在写数据库时立刻返回到调用者,从用户角度看,无疑提高了前端的响应速度.对异步I/O,写请求在一个独立的后台线程中被处理,这意味着启动数据库写操…
1.API 由两部分组成: 核心API(core API)和扩展API(extension API). 核心API的函数实现基本的数据库操作:连接数据库.处理SQL.遍历结果集.它也包括一些实用函数,比如:字符串转换.操作控制.调试和错误处理. 扩展API通过创建你自定义的SQL函数去扩展SQLite. 1.1.SQLite Version 3的一些新特点 (1)SQLite的API全部重新设计,由第二版的15个函数增加到88个函数.这些函数包括支持UTF-8和UTF-16编码的功能函数.(2)…
SQLite通过动态内存分配来获取各种对象(例如数据库连接和SQL预处理语句)所需内存.建立数据库文件的内存Cache.保存查询结果. 1.特性    SQLite内核和它的内存分配子系统提供以下特性:    (1)对内存分配失败的健壮处理.如果一个内存分配请求失败(即malloc()或realloc()返回NULL),SQLite将释放未关联的缓存页,然后重新进行分配请求.如果失败,SQLite返回SQLITE_NOMEM给应用程序.    (2)无内存泄漏.应用程序负责销毁已分配的任何对象.…
SQLite是遵守ACID的轻型数据库引擎,它包含在一个相对较小的C库中.它是D.RichardHipp创建的公有领域项目.不像常见的客户端/服务器结构范例,SQLite引擎不是一个与程序通信的独立进程,而是连接到程序中成为它的一个主要部分.所以主要的通信协议是在编程语言内的直接API调用.这在消耗总量.延迟时间和整体简单性上有积极的作用.整个数据库(定义.表.索引和数据本身)都在宿主主机上存储在一个单一的文件中.其简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的. 一.特性    …