`

Sqlite3 WAL

阅读更多
转:http://www.cnblogs.com/wuhenke/archive/2011/11/20/2256618.html
从3.7.0版本(对应iOS 4.3)开始,SQLite还提供了Write-Ahead Logging模式。与delete模式相比,WAL模式在大部分情况下更快,并发性更好,读和写之间互不阻塞;而其缺点对于iPhone这种嵌入式设备来说可以忽略,只需注意不要以只读方式打开WAL模式的数据库即可。
使用WAL模式时,改写操是附加(append)到WAL文件,而不改动数据库文件,因此数据库文件可以被同时读取。当执行checkpoint操作时,WAL文件的内容会被写回数据库文件。当WAL文件达到SQLITE_DEFAULT_WAL_AUTOCHECKPOINT(默认值是1000)页(默认大小是1KB)时,会自动使用当前COMMIT的线程来执行checkpoint操作。也可以关闭自动checkpoint,改为手动定期checkpoint。
为了避免读取的数据不一致,查询时也需要读取WAL文件,并记录一个结尾标记(end mark)。这样的代价就是读取会变得稍慢,但是写入会变快很多。要提高查询性能的话,可以减小WAL文件的大小,但写入性能也会降低。
需要注意的是,低版本的SQLite不能读取高版本的SQLite生成的WAL文件,但是数据库文件是通用的。这种情况在用户进行iOS降级时可能会出现,可以把模式改成delete,再改回WAL来修复。
要对一个数据库连接启用WAL模式,需要执行“PRAGMA journal_mode=WAL;”这条命令,它的默认值是“journal_mode=DELETE”。执行后会返回新的journal_mode字符串值,即成功时为"wal",失败时为之前的模式(例如"delete")。一旦启用WAL模式后,数据库会保持这个模式,这样下次打开数据库时仍然是WAL模式。
要停止自动checkpoint,可以使用wal_autocheckpoint指令或sqlite3_wal_checkpoint()函数。手动执行checkpoint可以使用wal_checkpoint指令或sqlite3_wal_checkpoint()函数。


http://www.sqlite.org/fileformat2.html#filesize

Database Header Format
Offset Size Description
0 16 The header string: "SQLite format 3\000"
16 2 The database page size in bytes. Must be a power of two between 512 and 32768 inclusive, or the value 1 representing a page size of 65536.
18 1 File format write version. 1 for legacy; 2 for WAL.
19 1 File format read version. 1 for legacy; 2 for WAL.



在我们的研究过程中,发现android 默认是将WAL模式关掉的,而在HTC HD 上开启的,这就产生了为什么从HTC HD拷贝出来的数据库到别的设备上会导致file is encrypted or is not a database


可以参考以下连接:
http://stackoverflow.com/questions/4718934/sqlite-issues-with-htc-desire-hd

http://stackoverflow.com/questions/6444170/sqlite3-wal-databaseerror-file-is-encrypted-or-is-not-a-database
分享到:
评论

相关推荐

    SQLite中的WAL机制详细介绍

    WAL的全称是Write Ahead Logging,它是很多数据库中用于实现原子事务的一种机制,SQLite在3.7.0版本引入了该特性。 二、WAL如何工作? 在引入WAL机制之前,SQLite使用rollback journal机制实现原子事务。 rollback ...

    Sqlite的jar和测试代码

    SQLite是一个开源、轻量级的数据库管理系统,常用于嵌入式环境,如移动应用或桌面应用,无需单独的服务器进程。在Java环境中,通过SQLite-JDBC驱动,我们可以使用SQLite数据库。压缩包中的“Sqlite的jar和测试代码”...

    svn清理sqlite3

    2. **数据库日志清理**:SQLite3在处理事务时会产生wal(Write-Ahead Logging)日志文件和shm文件,如`.svn/wc.db-wal`和`.svn/wc.db-shm`。如果这些文件未正常清理,可能导致svn操作异常。你可以手动删除这两个文件...

    sqlite3.rar

    SQLite3的API提供了丰富的函数,例如`sqlite3_open()`用于打开或创建数据库,`sqlite3_exec()`用于执行SQL命令,`sqlite3_prepare_v2()`和`sqlite3_step()`用于预编译和执行SQL语句,以及`sqlite3_finalize()`用于...

    sqlite3安装包.zip

    11. **日志和回滚**:SQLite3使用WAL(Write-Ahead Logging)日志模式,提高了并发性能,并提供了崩溃恢复能力。 12. **错误处理**:SQLite3返回错误代码和错误消息,帮助开发者诊断和修复问题。 通过解压“sqlite...

    sqlite3开发包3.8

    SQLite3是一种轻量级、开源的嵌入式数据库引擎,广泛应用于各种软件系统,特别是对数据存储有需求但不需要完整数据库服务器的场合。标题“sqlite3开发包3.8”表明我们将讨论的是SQLite3的3.8版本,这是一个重要的...

    sqlite3 x64 库文件

    SQLite3 是一个开源的、自包含的、无服务器的、零配置的、事务性的 SQL 数据库引擎,适用于各种操作系统和编程语言。它以其轻量级、高效和可靠而闻名,常用于嵌入式系统和移动应用。在 x64 架构上,SQLite3 提供了...

    SQLite3性能优化

    SQLite3是一款轻量级的数据库引擎,广泛应用于嵌入式设备和移动应用中。由于它的体积小、无需服务器进程,因此在许多场合下是理想的选择。然而,随着数据量的增长和复杂查询的增加,性能优化变得至关重要。本文将...

    Sqlite3数据库支持库

    6. 复制和同步:SQLite3提供了wal(Write-Ahead Logging)日志模式,优化了写操作的性能,并支持热备份和数据库复制。 7. 动态类型:SQLite3采用动态类型系统,数据类型根据值自动确定,这增加了灵活性。 8. 支持...

    sqlite3 x84 x64 开发包

    SQLite3提供了一系列C语言风格的API接口,如`sqlite3_open()`用于打开数据库,`sqlite3_exec()`用于执行SQL语句,`sqlite3_prepare_v2()`用于编译SQL语句,以及`sqlite3_step()`和`sqlite3_column_*()`用于遍历查询...

    SQLite3的使用测试程序

    本项目“SQLite3的使用测试程序”是用C语言编写的,用于评估SQLite3在不同条件下的性能表现,特别是关注线程模型、Write-Ahead Logging (WAL) 机制以及事务提交策略的影响。 1. **线程模型**: SQLite3 支持多线程...

    ASP.NET Core和Sqlite使用DEMO

    参考杨万青写的《ASP.NET Core与Restful API开发实战》,这本书写的不错,但是书中使用的是Sql Server,我一般不用这个数据库,为了学习方便,我的DEMO使用的是Sqlite3,这种数据库太好用了。另外DEMO里面也去掉了书...

    Sqlite3 數據庫修復工具

    SQLite3使用了一种叫做“wal”(Write-Ahead Logging)的日志模式来保证数据一致性,工具可能需要利用日志信息来帮助恢复。 3. **修复阶段**:一旦分析完成,工具将尝试修复发现的问题。这可能包括重新组织页、修复...

    sqlite3已在VS2010编译,并带学习资料及实例

    8. 性能优化:尽管SQLite3性能出色,但还可以通过调整配置选项,如启用WAL(Write-Ahead Logging)模式,来进一步提升性能。WAL模式提高了并发性和恢复速度,减少了锁竞争。 9. 数据类型:SQLite3采用动态类型系统...

    Sqlite3编译动态链接库资源

    - **性能优化**:学习如何通过配置选项和编程技巧优化SQLite3的性能,如启用WAL模式以提高写入速度,或者使用索引来加速查询。 - **错误处理**:掌握错误检测和报告机制,确保在遇到问题时能够快速定位和修复。 - ...

    嵌入式数据库SQLITE3使用指南.rar_minute27v_pourz5w_sqlite3_嵌入式_数据库

    2. 日志模式:SQLite3有多种存储引擎,如WAL(Write-Ahead Logging)模式提供更好的并发性和恢复能力。 3. 优化:通过合理设计索引、避免全表扫描、限制结果集大小等方式提高查询效率。 六、备份与恢复 SQLite3...

    AK3760数据库sqlite3

    9. **性能优化**:SQLite3支持多种优化策略,如索引使用、VACUUM操作以压缩数据库空间、WAL(Write-Ahead Logging)日志模式以提高并发性能。 10. **嵌入式特性**:由于其轻量级和无服务器的特性,SQLite3非常适合...

Global site tag (gtag.js) - Google Analytics