作者:黃亮、王君
引言:由于微信的一個(gè)版本升級(jí),我曾經(jīng)樂(lè)觀地認(rèn)為更換手機(jī)的時(shí)間也許可以推遲個(gè)一年了…
然而很快我就發(fā)現(xiàn)高興得有點(diǎn)早。本文最初撰寫(xiě)于元旦期間,而在一周之前升級(jí)Android微信6.3.9時(shí),這樣一個(gè)以往沒(méi)出過(guò)問(wèn)題的常規(guī)操作使我再次遭遇意外——微信啟動(dòng)時(shí)停在那個(gè)地球就不動(dòng)了。想用低版本6.3.8覆蓋安裝不允許(我記得某個(gè)版本之前是支持的),而且微信一旦卸載重裝用戶數(shù)據(jù)又無(wú)法保留。在包括清除緩存在內(nèi)的嘗試無(wú)效之后,我選擇了清除應(yīng)用數(shù)據(jù),代價(jià)是包括幾百條未讀信息在內(nèi)的所有聊天記錄都和我說(shuō)再見(jiàn)了。不知下一次能堅(jiān)持到什么時(shí)候?
注:本文討論的都是針對(duì)Android手機(jī),像我這樣的屌絲用戶也聽(tīng)說(shuō)過(guò)iPhone版本使用體驗(yàn)不在一個(gè)層面上。
這次主要想跟大家聊聊微信最近在功能和性能上的一些變化,以及我遇到的一些問(wèn)題,可以看出它們中的許多都跟數(shù)據(jù)庫(kù)有關(guān)。首先聲明下我是數(shù)據(jù)庫(kù)外行,班門(mén)弄斧地撰文本文更多是希望能拋磚引玉,同時(shí)我也附上了一位專家朋友在微信數(shù)據(jù)庫(kù)修復(fù)等方面的經(jīng)驗(yàn)和思考,大家如有不同見(jiàn)解、感想歡迎在文章結(jié)尾處留言:)
微信越用越慢怎么辦?
在Android微信版本是6.3.8推出之前,我發(fā)現(xiàn)微信明顯越用越慢,不時(shí)就會(huì)考慮下該什么時(shí)候升級(jí)手機(jī)。

上次聽(tīng)到有位DBA朋友說(shuō)他的微信數(shù)據(jù)庫(kù)壞了,手工修復(fù)的文件(結(jié)尾處有經(jīng)驗(yàn)分享)。記得當(dāng)時(shí)這位兄弟還堅(jiān)持用512MB內(nèi)存的手機(jī),Android版本2.3升級(jí)到微信5.x就上不去了,他的勤儉和鉆研精神令人敬佩!根據(jù)我比較有限的數(shù)據(jù)庫(kù)知識(shí),猜測(cè)在這個(gè)輕量級(jí)的sqlite數(shù)據(jù)庫(kù)中,每個(gè)好友和群的聊天記錄都存放在一個(gè)單獨(dú)的表里。每當(dāng)打開(kāi)其中的圖片時(shí),就要遍歷該會(huì)話歷史消息中的全部對(duì)象,因此這個(gè)時(shí)間就和聊天記錄的多少成正比了。
當(dāng)時(shí)我也想過(guò),在程序上有沒(méi)有優(yōu)化的辦法?也許微信是在權(quán)衡著一些什么。

由于有些聊天記錄不忍刪除,我的手機(jī)越用越慢,甚至打開(kāi)圖片的過(guò)程中微信有時(shí)會(huì)自動(dòng)退出。后來(lái)等到家人換手機(jī),我升級(jí)用1.5GB內(nèi)存的三星,該問(wèn)題暫時(shí)得到緩解。但隨著聊天記錄的增長(zhǎng),打開(kāi)圖片的時(shí)間又慢慢增加了,以至于我常常在想這個(gè)手機(jī)還能撐多長(zhǎng)時(shí)間。

索引優(yōu)化?打開(kāi)圖片頑疾解決
到了Android 6.3.7版本,由于加入了群公告等,我的微信已經(jīng)慢得不行。隨后發(fā)布了一個(gè)號(hào)稱改善速度的小版本,確實(shí)好了一點(diǎn),而真正的顯著變化在后面。

究其原因,估計(jì)是給每個(gè)會(huì)話的表里建了一個(gè)索引?收到新的對(duì)象只要更新這個(gè)索引即可,這樣即無(wú)需每次打開(kāi)圖片都遍歷一篇所有對(duì)象了。
與此同時(shí),整個(gè)微信的速度也流暢多了,也許我這1.5GB內(nèi)存Android機(jī)再撐個(gè)1-2年問(wèn)題不大了?記得以前每個(gè)Windows新版本經(jīng)常會(huì)帶動(dòng)PC硬件的銷售(由于流暢運(yùn)行的配置提高),那么這次微信的優(yōu)化,會(huì)不會(huì)影響到高端手機(jī)的銷售呢:)
快速迭代新增問(wèn)題、備份方式與性能
要說(shuō)6.3.8這個(gè)微信版本更新,也是有一點(diǎn)遺憾。比如有朋友反映收藏夾內(nèi)的視頻,如果之前沒(méi)有下載到本地(即在聊天會(huì)話中打開(kāi)播放過(guò))的話就無(wú)法打開(kāi),我也遇到了。初步分析,應(yīng)該是在收藏時(shí)把對(duì)象鏈接指向到本地的位置了,因此如果沒(méi)下載過(guò)就放不出來(lái)。
該問(wèn)題已經(jīng)在6.3.9中得到較好地處理,在第一次收藏視頻對(duì)象時(shí)會(huì)有一個(gè)“需要先下載到本地”的提示。
再回到本文開(kāi)頭我遇到的問(wèn)題,也許有朋友問(wèn)我為什么沒(méi)備份?說(shuō)實(shí)話,可能是因?yàn)閿?shù)據(jù)庫(kù)功能簡(jiǎn)單,微信備份的體驗(yàn)并不是太好。


可能是由于互聯(lián)網(wǎng)產(chǎn)品的快速迭代,在時(shí)間積累上遠(yuǎn)不如QQ的微信又加了較多的功能,Android版每隔一段時(shí)間就會(huì)給我點(diǎn)小意外。就其長(zhǎng)期不清理運(yùn)行的健壯性方面,我認(rèn)為還沒(méi)有達(dá)到張小龍所說(shuō)“用完即走”的程度。也許對(duì)這樣一個(gè)免費(fèi)聊天工具,我們不應(yīng)該要求太多,因?yàn)樗呀?jīng)在與微博等的pk中完勝,占據(jù)了我們這么多的碎片時(shí)間:)
專家補(bǔ)充:微信數(shù)據(jù)庫(kù)修復(fù)、更多思考(by王君)
iPhone版本的微信數(shù)據(jù)庫(kù)是否未加密?加密與性能的問(wèn)題;
sqlite損壞時(shí),安卓的根分區(qū)(/分區(qū))下備份數(shù)據(jù)庫(kù)(EnMicroMsg.dberr時(shí)間戳)的數(shù)據(jù)庫(kù)解密與恢復(fù);數(shù)據(jù)庫(kù)損壞的發(fā)生:在http://www.sqlite.org/docs.html頁(yè)面,How Database Corruption Can Occur;
資源(視頻、圖片、聲音等)文件的數(shù)量,是否過(guò)于零碎,導(dǎo)致速度緩慢;
微信是32位還是64位程序;
在http://www.sqlite.org/docs.html頁(yè)面,影響sqlite速度的大致有In-Memory Databases(微信是否使用)、R樹(shù)(是什么)、索引;
微信Sqlite加密,使用開(kāi)源的sqlite cipher。密碼與個(gè)人信息有關(guān)。
微信數(shù)據(jù)庫(kù)恢復(fù)基本流程:找到EnMicroMsg.dberr時(shí)間戳文件,解密,恢復(fù)數(shù)據(jù)庫(kù)。修改文件名為MicroMsg.db,放回安卓的根分區(qū)下微信目錄內(nèi),運(yùn)行微信,5.x以上版本微信將自動(dòng)加密為EnMicroMsg.db。
后記:我一直擔(dān)心因?yàn)楸疚牟粔驅(qū)I(yè)而給大家造成誤導(dǎo),故反復(fù)修改遲遲未能發(fā)布出來(lái)。日前微信又推出了新版本6.3.11(我還沒(méi)升級(jí)),要是再不發(fā)真的就過(guò)時(shí)了:)
via:企業(yè)存儲(chǔ)技術(shù)
End.
轉(zhuǎn)載請(qǐng)注明來(lái)自36大數(shù)據(jù)(36dsj.com):36大數(shù)據(jù) » 一個(gè)數(shù)據(jù)庫(kù)外行眼中的微信優(yōu)化 (附專家補(bǔ)充)
愛(ài)盈利-運(yùn)營(yíng)小咖秀 始終堅(jiān)持研究分享移動(dòng)互聯(lián)網(wǎng)App數(shù)據(jù)運(yùn)營(yíng)推廣經(jīng)驗(yàn)、策略、全案、渠道等純干貨知識(shí)內(nèi)容;是廣大App運(yùn)營(yíng)從業(yè)者的知識(shí)啟蒙、成長(zhǎng)指導(dǎo)、進(jìn)階學(xué)習(xí)的集聚平臺(tái);