1、前言
众所周知,微信在后台服务器不保存聊天记录,微信在移动客户端所有的聊天记录都存储在一个 SQLite 数据库中,一旦这个数据库损坏,将会丢失用户多年的聊天记录。而我们监控到现网的损坏率是0.02%,也就是每 1w 个用户就有 2 个会遇到数据库损坏。考虑到微信这么庞大的用户基数,这个损坏率就很严重了。更严重的是我们用的官方修复算法,修复成功率只有 30%。损坏率高,修复率低,这两个问题都需要我们着手解决。
2、SQLite 损坏原因及其优化
我们首先来看 SQLite 损坏的原因,SQLite官网(http://www.sqlite.org/howtocorrupt.html)上列出以下几点:
- 文件错写
- 文件锁 bug
- 文件 sync 失败
- 设备损坏
- 内存覆盖
- 操作系统 bug
- SQLite bug
但是我们通过收集到的大量案例和日志,分析出实际上移动端数据库损坏的真正原因其实就3个:
- 空间不足
- 设备断电
- 文件 sync 失败
我们需要针对这些原因一一进行优化。
2.1、优化空间占用
首先我们来优化微信的空间占用问题。在这之前微信的部分业务也做了空间清理,例如朋友圈会自动删除7天前缓存的图片。但是总的来说对文件空间的使用缺乏一个全局把控,全靠各个业务自觉。我们需要做得更积极主动,要让开发人员意识到用户的存储空间是宝贵