作者:黄亮、王君
引言:由于微信的一个版本升级,我曾经乐观地认为更换手机的时间也许可以推迟个一年了…
然而很快我就发现高兴得有点早。本文最初撰写于元旦期间,而在一周之前升级Android微信6.3.9时,这样一个以往没出过问题的常规操作使我再次遭遇意外——微信启动时停在那个地球就不动了。想用低版本6.3.8覆盖安装不允许(我记得某个版本之前是支持的),而且微信一旦卸载重装用户数据又无法保留。在包括清除缓存在内的尝试无效之后,我选择了清除应用数据,代价是包括几百条未读信息在内的所有聊天记录都和我说再见了。不知下一次能坚持到什么时候?
注:本文讨论的都是针对Android手机,像我这样的屌丝用户也听说过iPhone版本使用体验不在一个层面上。
这次主要想跟大家聊聊微信最近在功能和性能上的一些变化,以及我遇到的一些问题,可以看出它们中的许多都跟数据库有关。首先声明下我是数据库外行,班门弄斧地撰文本文更多是希望能抛砖引玉,同时我也附上了一位专家朋友在微信数据库修复等方面的经验和思考,大家如有不同见解、感想欢迎在文章结尾处留言:)
微信越用越慢怎么办?
在Android微信版本是6.3.8推出之前,我发现微信明显越用越慢,不时就会考虑下该什么时候升级手机。
上次听到有位DBA朋友说他的微信数据库坏了,手工修复的文件(结尾处有经验分享)。记得当时这位兄弟还坚持用512MB内存的手机,Android版本2.3升级到微信5.x就上不去了,他的勤俭和钻研精神令人敬佩!根据我比较有限的数据库知识,猜测在这个轻量级的sqlite数据库中,每个好友和群的聊天记录都存放在一个单独的表里。每当打开其中的图片时,就要遍历该会话历史消息中的全部对象,因此这个时间就和聊天记录的多少成正比了。
当时我也想过,在程序上有没有优化的办法?也许微信是在权衡着一些什么。
由于有些聊天记录不忍删除,我的手机越用越慢,甚至打开图片的过程中微信有时会自动退出。后来等到家人换手机,我升级用1.5GB内存的三星,该问题暂时得到缓解。但随着聊天记录的增长,打开图片的时间又慢慢增加了,以至于我常常在想这个手机还能撑多长时间。
索引优化?打开图片顽疾解决
到了Android 6.3.7版本,由于加入了群公告等,我的微信已经慢得不行。随后发布了一个号称改善速度的小版本,确实好了一点,而真正的显著变化在后面。
究其原因,估计是给每个会话的表里建了一个索引?收到新的对象只要更新这个索引即可,这样即无需每次打开图片都遍历一篇所有对象了。
与此同时,整个微信的速度也流畅多了,也许我这1.5GB内存Android机再撑个1-2年问题不大了?记得以前每个Windows新版本经常会带动PC硬件的销售(由于流畅运行的配置提高),那么这次微信的优化,会不会影响到高端手机的销售呢:)
快速迭代新增问题、备份方式与性能
要说6.3.8这个微信版本更新,也是有一点遗憾。比如有朋友反映收藏夹内的视频,如果之前没有下载到本地(即在聊天会话中打开播放过)的话就无法打开,我也遇到了。初步分析,应该是在收藏时把对象链接指向到本地的位置了,因此如果没下载过就放不出来。
该问题已经在6.3.9中得到较好地处理,在第一次收藏视频对象时会有一个“需要先下载到本地”的提示。
再回到本文开头我遇到的问题,也许有朋友问我为什么没备份?说实话,可能是因为数据库功能简单,微信备份的体验并不是太好。
可能是由于互联网产品的快速迭代,在时间积累上远不如QQ的微信又加了较多的功能,Android版每隔一段时间就会给我点小意外。就其长期不清理运行的健壮性方面,我认为还没有达到张小龙所说“用完即走”的程度。也许对这样一个免费聊天工具,我们不应该要求太多,因为它已经在与微博等的pk中完胜,占据了我们这么多的碎片时间:)
专家补充:微信数据库修复、更多思考(by王君)
iPhone版本的微信数据库是否未加密?加密与性能的问题;
sqlite损坏时,安卓的根分区(/分区)下备份数据库(EnMicroMsg.dberr时间戳)的数据库解密与恢复;数据库损坏的发生:在http://www.sqlite.org/docs.html页面,How Database Corruption Can Occur;
资源(视频、图片、声音等)文件的数量,是否过于零碎,导致速度缓慢;
微信是32位还是64位程序;
在http://www.sqlite.org/docs.html页面,影响sqlite速度的大致有In-Memory Databases(微信是否使用)、R树(是什么)、索引;
微信Sqlite加密,使用开源的sqlite cipher。密码与个人信息有关。
微信数据库恢复基本流程:找到EnMicroMsg.dberr时间戳文件,解密,恢复数据库。修改文件名为MicroMsg.db,放回安卓的根分区下微信目录内,运行微信,5.x以上版本微信将自动加密为EnMicroMsg.db。
后记:我一直担心因为本文不够专业而给大家造成误导,故反复修改迟迟未能发布出来。日前微信又推出了新版本6.3.11(我还没升级),要是再不发真的就过时了:)
via:企业存储技术
End.
转载请注明来自36大数据(36dsj.com):36大数据 » 一个数据库外行眼中的微信优化 (附专家补充)
爱盈利-运营小咖秀 始终坚持研究分享移动互联网App数据运营推广经验、策略、全案、渠道等纯干货知识内容;是广大App运营从业者的知识启蒙、成长指导、进阶学习的集聚平台;