SQLite原子提交原理

SQLite原子提交原理

ID:37901418

大小:339.00 KB

页数:24页

时间:2019-06-02

SQLite原子提交原理_第1页
SQLite原子提交原理_第2页
SQLite原子提交原理_第3页
SQLite原子提交原理_第4页
SQLite原子提交原理_第5页
资源描述:

《SQLite原子提交原理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、SQLite的原子提交原理摘要: 本文源自:http://www.sqlite.org/atomiccommit.html,2007/11/28的版本本人正在做一个项目,在项目中定义了自己的文件格式,为了做到停电或程序崩溃不损坏这些文件原有的数据,故针对操作的原子性做一些思考,后来看到sqlite的这篇文章,与自己的实现方式作了一些对比。故顺手在研究此文章的时候将大意译成了中文。毕竟只是一时顺手之作,应该存在不少的误读与错误,请多多包涵,此文章的原始地址在http://chensheng.net/p/sqlite/auto_commit

2、_zh_cn.html,本文可以转载,但请保留出处,以便他人能够方便找到我在修改此文可能的错误之后重新发布的版本。如果发现错误请发mail给我erehw#163.com。 本文描述了sqlite为保证数据库文件不被损坏而采取的种种手段,对于一些小型应用值得借鉴。其实在我看来,我自己实现这种方式似乎都有些不必要,也可以直接利用sqlite或者berkeleydb即可。 2008-1-29于杭州,时日江南一片暴雪,众多机场车站都处于凝滞状态。感谢众多在此次雪灾之中作出贡献的人们。 目录SQLite的原子提交原理...11.0简介...22.

3、0硬件设定...23.0单个文件提交...43.1实始状态...43.2申请一个共享锁...53.3从数据库里面读取信息...53.4申请一个ReservedLock.63.5生成一个回滚日志文件...63.6修改用户进程中的数据页...73.7刷新回滚日志文件到存储设备中...73.8获得一个独享锁...73.9将变更写入到数据库文件中...83.10刷新变更到存储...83.11删除回滚日志文件...93.12释放锁...94.0回滚...104.1出事了,出事了!!!104.2HotRollbackJournals114.3取得数

4、据库的一个独享锁...114.4回滚没有完成的变更...124.5删除hot日志文件...134.6如果一切正常,没有什么未完成的写操作...135.0多文件提交...145.1每个数据库文件单独拥有日志文件...145.2主日志文件...155.3更新回滚日志文件头...165.4修改数据库文件...165.5删除主日志文件...175.6清除回滚日志...176.0原子操作的一些实现细节...186.1总是记录整个扇区...186.2写日志文件时垃圾的处理...196.3提交前缓存溢出...197.0优化...207.1在事务间保存

5、缓存...207.2独享访问模式...217.3不必将空闲页写进日志...217.4单页更新及扇区原子写...227.5FilesystemsWithSafeAppendSemantics228.0原子提交行为测试...239.0会导致完蛋的事情...239.1缺乏文件锁实现...239.2不完整的磁盘刷新...249.3文件部分地删除...249.4写入到文件中的垃圾...249.5删除掉或更名了“hot”日志文件...2410.0总结及未来的路...25  1.0简介“原子提交”是SQLite这种支持事务的数据库的一个重要特性。原子

6、提交意味着某个事务中数据库的变化会完整完成或者根本不完成。原子提交意味着不同的写入分别写入到数据库的不同部分就似同时发生在同一个时间点一样。 实际上硬件会连续的写到海量存储器中,只是写一个扇区所用的时间非常少。所以,同时或瞬间写入到数据文件的不同部分成为可能。SQLite的原子提交逻辑会使得一个事务中的变化就象同时发生的一样。事务的原子是SQLite的重要特性,即使事务由于操作系统出错或掉电发生中断也能保持其原子性。本文描述了SQLite实现原子操作的技术。2.0硬件设定在这往篇文章中,我们把海量存储特指定为“硬盘”,即使它可能是fla

7、shmemory.我们假定硬盘是以扇区为单位进行整块写入的。我们不能单独修改硬盘的小于扇区的部分。如果需要修改硬盘小于扇区的部分,你也必须整个读入此部分所在扇区,对此扇区进行修改,然后将整个扇区写回硬盘。在传统的Spinningdisk中,扇区是最小的传输单元---无论是读还是写。然而,对于flashmemory,每次读的最小数目通常都远小于最小写操作数目。SQLite只关心写操作的最小数目,因此在本文中,当我们说“扇区”的时候,就是指单次写入的最少字节总数。SQLite3.3.14以前的版本,我们假定任何情况下,一个扇区是512字节。

8、这是一个编译时设定的值,而且从没针对更大数进行测试过。当磁盘驱动器内部使用的是以512字节为单位的扇区时,512字节的假定显得非常合理。然而,现在的磁盘都已经发展到4k每扇区了。同样,flashmemory

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。