数据库Sqlite-WAL模式

来源:互联网 发布:dotacoko淘宝 编辑:程序博客网 时间:2024/05/22 20:09

这里简单的记录下WAL模式的特点吧,是在sqlite 3.7.0之后出现的。WAL全称Write Ahead Log,其实就是预写日志。是实现事务原子提交的一种方法。

什么是事务的原子提交,事务的原子性 :事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做。就比如说我开启一个事务

然后做了插入操作,插入了很多数据,但是由于断电了,电脑突然关机,则会发生事务的回滚,也就是说所有的操作都撤销。

WAL模式其实就是当事务对数据库进行修改的时候,会将修改的数据写到WAL文件中,不会直接的写到数据库中,如果事务失败了,那么久撤销

修改,如果成功,就会在文件达到一定大小定期的时候回写入到数据库,因为WAL文件过大会去影响事务的速度,把WAL文件的内容更新到数据库文件的过程叫做一次CheckPoint

摘抄网络:使用WAL模式时,改写操作是附加(append)到WAL文件,而不改动数据库文件,因此数据库文件可以被同时读取。当执行checkpoint操作时,WAL文件的内容会被写回数据库文件。当WAL文件达到SQLITE_DEFAULT_WAL_AUTOCHECKPOINT(默认值是1000)页(默认大小是1KB)时,会自动使用当前COMMIT的线程来执行checkpoint操作。也可以关闭自动checkpoint,改为手动定期checkpoint。

对数据库文件的修改被追加到单独的WAL文件中。当一条记录被追加到WAL文件后,标志着一次commit的结束。因此一次commit不必对数据库文件进行操作,当正在进行写操作时,可以同时进行读操作。多个事务的内容可以追加到一个WAL文件的末尾。

 WAL文件会在数据库的第一个连接建立时创建,在最后一个连接释放时删除。

当一个读操作发生在WAL模式的数据库上时,会首先找到WAL文件中最后一次提交,叫做"end mark"。每一个事务都有的end point。

参考资料:https://www.cnblogs.com/huahuahu/p/sqlite-zhiWAL-mo-shi.html

                http://blog.csdn.net/zearot/article/details/51039593




原创粉丝点击