SQLite 优化配置

一. 理论知识:

  synchronous 获取或设置当前磁盘的同步模式,该模式用于控制SQLite写入磁盘的时机。

     

通过上述可以看到,sqlite3默认采用最安全也是最慢的方式来刷盘写入数据库。如果我们业务中对
数据丢失的情况不是太敏感,而更关注于性能,我们可以设置为OFF。

当设置为OFF后,写入性能可提高3倍。大约提升到 300 的 qps

二. 关于sqlite 优化MTK建议:

 1.敝司对SQLite没有做任何修改,即保持Google原生。
 2.SQLite默认的sync mode 为full,但是敝司有了解到有些客户(如小米 OPPO)会进行客制化,即将sync mode修改为normal,这样SQLite数据库引擎在大部分紧急时刻会暂停,但   3. normal不像FULL模式下那么频繁,从而提升了操作速度。

  4. full和normal最大的区别在于full模式下于SQLite数据库引擎在紧急时刻会暂停以确定数据已经写入磁盘,而normal模式下SQLite数据库引擎只会在大部分紧急时刻会暂停,但不像FULL模式下那么频繁。因此目前Google给出的明确潜在风险是,在normal模式下有很小的几率发生电源故障导致数据库损坏的情况。
        某些客户会进行客制化,将sync mode改为normal,但是敝司没有遇到过客户客制化后提相关的异常问题。贵司可以尝试将sync mode该问题normal进行压测。

         

三. 代码配置:

android/frameworks/base/core/res/res/values/config.xml

     <!-- The database synchronization mode when using the default journal mode.
          FULL is safest and preserves durability at the cost of extra fsyncs.
          NORMAL also preserves durability in non-WAL modes and uses checksums to ensure
          integrity although there is a small chance that an error might go unnoticed.
          Choices are: FULL, NORMAL, OFF. -->
     <string name="db_default_sync_mode" translatable="false">FULL</string>

四. 测试结果:

(1) 3G内存项目测试对比:

配置FULL:                                 配置NORMAL:                    配置OFF:

 

 (2) 6G内存项目测试对比:

  配置FULL:                                  配置NORMAL:                 配置OFF:

从测试结果上看,产生的效果影响还是挺大的.也符合理论: OFF >NORMAL>FULL. 3G 内存的手机的配置, Sqlite的insert,update,delete  至少相差2倍.  6G 内存的提升大概在50%~60%.

五. 建议:

从理论上分析,NORMAL 风险不是很大,可以将db_default_sync_mode 配置成NORMAL. 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值