精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

微信SQLite數據庫修復實踐

數據庫 其他數據庫
眾所周知,微信在后臺服務器不保存聊天記錄,微信在移動客戶端所有的聊天記錄都存儲在一個SQLite數據庫中,一旦這個數據庫損壞,將會丟失用戶多年的聊天記錄。而我們監控到現網的損壞率是0.02%,也就是每1w個用戶就有2個會遇到數據庫損壞。

前言

眾所周知,微信在后臺服務器不保存聊天記錄,微信在移動客戶端所有的聊天記錄都存儲在一個 SQLite 數據庫中,一旦這個數據庫損壞,將會丟失用戶多年的聊天記錄。而我們監控到現網的損壞率是0.02%,也就是每 1w 個用戶就有 2 個會遇到數據庫損壞??紤]到微信這么龐大的用戶基數,這個損壞率就很嚴重了。更嚴重的是我們用的官方修復算法,修復成功率只有 30%。損壞率高,修復率低,這兩個問題都需要我們著手解決。

SQLite 損壞原因及其優化

我們首先來看SQLite損壞的原因,SQLite官網(http://www.sqlite.org/howtocorrupt.html )上列出以下幾點:

文件錯寫

文件鎖 bug

文件 sync 失敗

設備損壞

內存覆蓋

操作系統bug

SQLite bug

但是我們通過收集到的大量案例和日志,分析出實際上移動端數據庫損壞的真正原因其實就3個:

空間不足

設備斷電

文件sync失敗

我們需要針對這些原因一一進行優化。

優化空間占用

首先我們來優化微信的空間占用問題。在這之前微信的部分業務也做了空間清理,例如朋友圈會自動刪除7天前緩存的圖片。但是總的來說對文件空間的使用缺乏一個全局把控,全靠各個業務自覺。我們需要做得更積極主動,要讓開發人員意識到用戶的存儲空間是寶貴的。我們采取以下措施:

業務文件先申請后使用,如果某個文件沒有申請就使用了,會被自動掃描出來并刪除;

每個業務文件都要申明有效期,是一天、一個星期、一個月還是***存儲;

過期文件會被自動清理。

文件自動清理 

對于微信之外的空間占用,例如相冊、視頻、其他App的空間占用,微信本身是做不了什么事情的,我們可以提示用戶進行空間清理:

提示進行空間清理 

優化文件 sync

synchronous = FULL

設置SQLite的文件同步機制為全同步,亦即要求每個事物的寫操作是真的flush到文件里去。

fullfsync = 1

通過與蘋果工程師的交流,我們發現在 iOS 平臺下還有 fullfsync (https://www.sqlite.org/pragma.html#pragma_fullfsync) 這個選項,可以嚴格保證寫入順序跟提交順序一致。設備開發商為了測評數據好看,往往會對提交的數據進行重排,再統一寫入,亦即寫入順序跟App提交的順序不一致。在某些情況下,例如斷電,就可能導致寫入文件不一致的情況,導致文件損壞。

優化效果

多管齊下之后,我們成功將損壞率降低了一半多;DB損壞還是無法完全避免,我們還是得提高修復成功率。

提高修復成功率 

SQLite 修復邏輯優化

master 表

首先我們來看 SQLite 的架構。SQLite 使用 B+樹 存儲一個表,整個 SQLite 數據庫就是這些 B+樹 組成的森林。對于每個表的元數據(表名、根節點地址、表 scheme 等),都記錄在一個叫 sql_master 的表中。這個 sql_master 表(下簡稱 master 表) 本身也是一個 B+樹 存儲的普通表。

SQLite 修復邏輯優化 

官方修復算法率低下原因

官方修復算法是這樣一個流程:從 master 表中讀出一個個表的信息,根據根節點地址和創表語句來 select 出表里的數據,能 select 多少是多少,然后插入到一個新 DB 中。要注意的是 master 表他本身也是一個 B+樹 形式的普通表,DB 第0頁就是他的根節點。那么只要 master 表某個節點損壞,這個節點下面記錄的表就都恢復不了。更壞的情況是 DB 第0頁損壞,那么整個 master 表都讀不出來,就導致整個DB都恢復失敗。這就是官方修復算法成功率這么低的原因,太依賴 master 表了。

備份 master 表

那么最自然的想法,自然是另外備份一份 master 表了,也不需要用B+樹,直接用數組序列化存儲就好。我們只需要每隔一段時間輪詢 master 表,看看最近有沒有增刪 table,有的話就全量備份。

備份時機

這里有個擔憂,就是普通數據表的插入會不會導致表的根節點發生變化,也就是說 master 表會不會頻繁變化,如果變化很頻繁的話,我們就不能簡單地進行輪詢方案了。通過分析源碼,我們發現 SQLite 里面 B+樹 算法的實現是 向下分裂 的,也就是說當一個葉子頁滿了需要分裂時,原來的葉子頁會成為內部節點,然后新申請兩個頁作為他的葉子頁。這就保證了根節點一旦定下來,是再也不會變動的。實際的代碼調試也證實了我們這個推論。所以說 master 表只會在新創建表或者刪除一個表時才會發生變化,我們完全可以采用定時輪詢方案。

備份文件有效性

接下來的難題是既然 DB 可以損壞,那么這個備份文件也會損壞,怎么辦呢?我們采用了 雙備份 的機制。具體來說就是會有新舊兩個備份文件,每個文件頭都加上 CRC 校驗;每次備份時,從兩個備份文件中選出一個進行覆蓋。具體怎么選呢?優先選損壞那個備份文件,如果兩個都有效,那么就選相對較舊的。這就保證了即使本次寫入導致文件損壞,還有另外一份備份可以用。這個做法跟 Realm 標榜的 MVCC(多版本并發控制)的做法有異曲同工之妙,相當于確認新寫入的文件有效之后,才使用新寫入的文件,否則還是繼續用舊的有效的文件。

前面提到 DB 損壞的一個常見場景是空間不足,這種情況下還要分配文件空間給備份文件也是會失敗的。為了解決這個問題,我們采取 預先分配空間 的做法,初始值是 32K,大約可存 750 個表的元信息,后續則按照32K的倍數進行增長。

優化效果

通過備份 master 表,我們成功將修復成功率提高了一倍多。

修復成功率提高一倍多 

其他

通過這些優化,我們提高了微信聊天記錄存儲的可靠性。這些優化實踐,會同之前在并發性能方面的優化實踐(微信iOS SQLite源碼優化實踐),將會合并到微信即將開源的 WCDB(WeChat Database)組件中。我們正在進行緊張的代碼整理工作,爭取在 2017 年年中開源 WCDB。

 

責任編輯:杜寧 來源: WeMobileDev
相關推薦

2011-07-20 12:34:49

SQLite數據庫約束

2019-08-15 07:00:54

SQLite數據庫內存數據庫

2017-07-12 09:20:42

SQLite數據庫移植

2011-08-04 18:00:47

SQLite數據庫批量數據

2023-02-21 15:15:23

2011-08-02 16:16:08

iPhone開發 SQLite 數據庫

2024-10-28 16:31:03

2009-02-02 13:16:23

修復數據表MySQL

2011-04-12 09:43:17

Sybase數據庫修復技巧

2011-08-24 13:49:45

Access數據庫轉化

2011-07-05 10:16:16

Qt 數據庫 SQLite

2018-07-13 09:20:30

SQLite數據庫存儲

2016-03-04 10:29:51

微信支付源碼

2011-04-18 13:40:15

SQLite

2011-07-01 14:06:57

Qt sqlite

2023-10-17 08:31:03

SQLite數據庫

2013-04-10 14:21:35

2010-03-04 15:31:44

Python SQLI

2011-08-30 14:15:34

QTSQLite數據庫

2013-04-01 10:49:51

iOS開發sqlite數據庫
點贊
收藏

51CTO技術棧公眾號

免费久久99精品国产自在现线| 99tv成人影院| 欧美激情资源网| 国产日韩欧美另类| 久久久久久激情| 色天下一区二区三区| 欧美在线视频全部完| 最近免费观看高清韩国日本大全| 人妻无码一区二区三区久久99| 另类av一区二区| 久久亚洲精品视频| 中文在线永久免费观看| 国产精品66| 天天av天天翘天天综合网色鬼国产| 亚洲国产欧洲综合997久久 | 丁香五月网久久综合| 成人在线免费看视频| 888久久久| 亚洲欧美日韩一区在线| 无码国产精品一区二区高潮| 亚洲www免费| 亚洲在线一区二区三区| 亚洲高清视频一区二区| 熟妇人妻一区二区三区四区| 久久av资源站| 国产精品96久久久久久又黄又硬| 国产亚洲欧美精品久久久www| 日韩精品二区| 亚洲欧美另类人妖| 亚洲av永久无码精品| 亚洲毛片在线免费| 欧美性色欧美a在线播放| 国产精品久久久久久久久电影网| 成人午夜电影在线观看| 夫妻av一区二区| 国产成人精品免高潮在线观看| 国精品无码一区二区三区| 竹菊久久久久久久| 日韩精品一区二区三区视频| 丁香婷婷激情网| 成人免费观看在线观看| 久久久精品黄色| 国产精品高清免费在线观看| 狠狠躁夜夜躁人人爽天天高潮| 色喇叭免费久久综合| 亚洲女人被黑人巨大进入| 日本特黄在线观看| 78精品国产综合久久香蕉| 午夜精品一区二区三区免费视频 | 久久99热精品| 青青青视频在线播放| 亚洲人成网77777色在线播放| 日韩一区二区不卡| 天天色综合天天色| 日韩伦理在线一区| 亚洲午夜久久久| 欧美另类videos| 麻豆视频在线| 中文字幕精品—区二区四季| 欧美资源一区| 欧美挠脚心网站| www国产亚洲精品久久麻豆| 91天堂在线视频| 一本色道久久综合熟妇| 蜜臀va亚洲va欧美va天堂| 热re99久久精品国产66热| 日本亚洲欧美在线| 精品电影一区| 久久久久久尹人网香蕉| 日韩免费一二三区| 极品少妇一区二区三区| 久久免费高清视频| 精品无码人妻一区二区三区品| 午夜久久影院| 欧美福利视频在线| 精品无码久久久久久久| 一区在线免费观看| 欧美激情网友自拍| 久操免费在线视频| 亚洲清纯自拍| 欧美一级电影免费在线观看| 国产精品久久久久久久久久久久久久久久久 | 好了av在线| 亚洲免费看黄网站| 特级黄色录像片| 成人在线免费看黄| 一区二区三区av电影| 你懂的av在线| 激情开心成人网| 欧美日韩国产在线观看| 天天操精品视频| 97品白浆高清久久久久久| 亚洲精品国精品久久99热| 欧美深性狂猛ⅹxxx深喉| 日韩精品a在线观看91| 亚洲全黄一级网站| 亚洲欧美综合7777色婷婷| 91精品国产乱码久久久久久| 欧美久久精品一级黑人c片| 欧美一级高潮片| 久久激情视频| 亚洲在线观看视频| 无码国产精品96久久久久| 不卡的av电影| 免费成人av网站| 午夜免费播放观看在线视频| 依依成人精品视频| 欧美性大战久久久久xxx| 日韩精品一区二区三区av| 在线欧美日韩国产| 亚洲免费av一区| 欧美男同视频网| 欧美伦理91i| 久久久精品毛片| 国产乱码精品一品二品| 蜜桃传媒视频第一区入口在线看| freemovies性欧美| 亚洲一区二区三区四区中文字幕| 国产中文字幕在线免费观看| 日韩国产大片| 亚洲国产天堂久久综合| 激情高潮到大叫狂喷水| 亚洲精选91| 国产精品一区二区三区毛片淫片 | 永久免费网站在线| 色综合天天综合| 黄色片免费网址| 国产欧美一区二区三区精品观看| 欧美精品中文字幕一区| 中文字幕手机在线视频| 成人福利在线看| 亚洲黄色网址在线观看| 多野结衣av一区| 日韩一区二区三区在线| 影音先锋制服丝袜| 日韩午夜精品| 亚洲一区二区在线| 国产高清免费在线播放| 性做久久久久久| 国产一级二级av| 水蜜桃久久夜色精品一区| 91成人国产在线观看| 国产99久一区二区三区a片 | 欧美乱熟臀69xxxxxx| 亚洲婷婷在线观看| 欧美fxxxxxx另类| 成人做爰www免费看视频网站| 国产一级免费在线观看| 亚洲欧美日本韩国| 成人观看免费完整观看| 欧美性生活一级| 亚洲网址你懂得| 日韩一区二区视频在线| av高清久久久| 国产a级片网站| av男人一区| 欧美成人精品三级在线观看| 一级片在线观看视频| 欧美国产综合色视频| 日韩一级片播放| 最新亚洲精品| 日韩免费观看网站| 青草久久伊人| 色av成人天堂桃色av| 久久精品国产亚洲av麻豆| 一区二区久久| 狼狼综合久久久久综合网| 午夜影院一区| 精品亚洲一区二区三区在线观看 | 精品视频在线一区二区| 欧美日韩国产天堂| jizz18女人高潮| 美女在线观看视频一区二区| 亚洲精品一区二区毛豆| 久久精品国产精品亚洲毛片| 中文字幕日韩有码| 一本久道久久综合无码中文| 中文字幕亚洲区| 久久久国产精品久久久| 伊人精品视频| 麻豆传媒一区二区| 日韩视频网站在线观看| 中文字幕亚洲情99在线| 国产一区二区三区在线观看| 最新久久zyz资源站| 永久av免费在线观看| 91精品电影| 亚洲iv一区二区三区| 91精品久久久| 精品亚洲一区二区三区四区五区| 日本中文字幕在线观看视频| 国产精品另类一区| wwwww在线观看| 99亚洲一区二区| 亚洲蜜桃在线| a级日韩大片| 国产成人精品a视频一区www| 黄色网址视频在线观看| 亚洲成av人影院在线观看| 亚洲熟妇无码乱子av电影| 国产精品少妇自拍| 无码人妻丰满熟妇区毛片蜜桃精品| 亚洲人成人一区二区三区| 日韩女优中文字幕| 日韩一区免费| 国产成人高潮免费观看精品| 日本性爱视频在线观看| 亚洲视频axxx| 亚洲a视频在线观看| 日本道精品一区二区三区 | 伊人婷婷欧美激情| 久久国产精品无码一级毛片 | 最新中文字幕一区二区三区| 岛国精品一区二区三区| 理论电影国产精品| 亚洲精品久久久久久久蜜桃臀| 精品久久久亚洲| 97超碰人人看人人| 欧美极品影院| 欧美激情欧美激情| 国产精品毛片一区二区三区四区| 精品少妇一区二区三区视频免付费 | 亚洲 欧美 精品| 91精品国产一区二区三区| 黄色在线视频网址| 一区二区成人在线观看| 精品人妻无码一区二区三区换脸| 国产99一区视频免费| 激情视频免费网站| 99伊人成综合| www.国产亚洲| 久久国产小视频| 你懂的视频在线一区二区| 亚洲精品不卡在线观看| 国产视频999| 成人黄色免费短视频| 久久久久久国产| 性欧美1819sex性高清大胸| 日韩精品电影网| 亚洲大尺度网站| 91精品国产91久久综合桃花| 中文字幕理论片| 色综合中文综合网| 五月天婷婷丁香| 亚洲一区中文日韩| 中文字幕电影av| 中文字幕视频一区| 亚洲av无码国产精品麻豆天美| 99久精品国产| 中文在线观看免费视频| 国产成人亚洲综合a∨猫咪| 欧美一级xxxx| 免费在线观看精品| 免费看污黄网站| 日韩精品每日更新| 我看黄色一级片| 亚洲经典在线看| 一级特黄妇女高潮| 欧美日韩蜜桃| 日本男女交配视频| 午夜精品亚洲| 老子影院午夜伦不卡大全| 欧美成人日本| 女人色极品影院| 国产精品videosex极品| 欧美极品少妇无套实战| 国自产拍偷拍福利精品免费一 | 日韩视频在线观看| 图片区小说区区亚洲五月| 精品日韩毛片| 日韩一区不卡| 97人人精品| 日本黄大片在线观看| 在线欧美日韩| 国产在线青青草| 日本中文字幕一区二区有限公司| 韩国日本美国免费毛片| 极品尤物av久久免费看| 久久久久xxxx| 国产91综合一区在线观看| 欧美久久久久久久久久久| 不卡的看片网站| 精品人妻互换一区二区三区| 久久久精品国产免大香伊| 亚洲毛片亚洲毛片亚洲毛片| 亚洲视频图片小说| 久久久精品99| 欧美日韩精品在线视频| 波多野结衣mp4| 91精品国产色综合久久ai换脸 | 国产农村妇女毛片精品久久莱园子| 欧美日韩二三区| 日韩高清不卡一区二区三区| 污色网站在线观看| 韩国精品免费视频| 韩国黄色一级片| 久久―日本道色综合久久| 国产一二三四视频| 亚洲激情在线激情| 久久久久99精品成人片我成大片| 欧美无砖砖区免费| 精品二区在线观看| 国产午夜精品理论片a级探花| 在线观看美女网站大全免费| 欧美成人精品一区| 在线观看网站免费入口在线观看国内 | 爽爽视频在线观看| 在线观看日韩av| 国产蜜臀在线| 国产精品欧美久久久| 国产 日韩 欧美 综合 一区| 欧美下载看逼逼| 欧美日韩ab| 日韩av.com| 91视频com| 中文字幕av播放| 色哟哟一区二区三区| 精品国产伦一区二区三| 国产亚洲精品久久久| 国产盗摄在线视频网站| 国产精品视频免费在线| 久久久免费毛片| 国产精品波多野结衣| 久久久久久夜| 韩国三级在线看| 国产精品黄色在线观看| 五月天激情国产综合婷婷婷| 日韩欧美国产小视频| 五月婷婷在线视频| 人体精品一二三区| 91精品啪在线观看国产手机| 亚洲激情电影在线| av成人国产| 无码人妻少妇色欲av一区二区| 国产欧美日韩另类视频免费观看| 日本熟妇毛耸耸xxxxxx| 欧美一区二区精美| 黄色av网址在线免费观看| 欧美精品xxx| 国产精久久久| 亚洲一区二区三区涩| 三级久久三级久久久| www.555国产精品免费| 一区二区三区中文字幕精品精品 | 欧美日韩不卡在线| 国产三级视频在线播放线观看| 久久欧美在线电影| 日本99精品| 国产免费一区二区三区四在线播放| 日韩在线卡一卡二| wwwwww日本| 亚洲国产aⅴ天堂久久| aaa一区二区三区| 久久精品人人爽| 久久人体av| 亚洲一区二区三区精品在线观看 | 日韩精品在线中文字幕| 成人av在线播放网址| 精品午夜福利在线观看| 日韩精品在线一区二区| 日韩成人伦理| 懂色一区二区三区av片| 国产精品大片免费观看| 丰满饥渴老女人hd| 夜夜嗨av一区二区三区网页| www国产在线| 欧美激情一区二区久久久| 欧美精品影院| 红桃一区二区三区| 国产老肥熟一区二区三区| avove在线播放| 日韩欧美中文字幕精品| 成年人国产在线观看| 国产一区二区久久久| 国产一区91| 精品人妻中文无码av在线| 欧美亚洲综合色| 免费网站免费进入在线| 91免费看片在线| 尤物网精品视频| 国产伦精品一区二区三区妓女 | 日韩激情第一页| 成人bbav| 欧美日韩亚洲在线| 免费成人在线网站| 国产黄在线免费观看| 亚洲国产精品久久久久秋霞蜜臀 | 日韩一区国产在线观看| 一本色道精品久久一区二区三区| 国产成人av一区二区三区不卡| 在线观看三级视频欧美| 久草中文在线| 国产综合av一区二区三区| 国产精品一国产精品k频道56| 大又大又粗又硬又爽少妇毛片| 欧美人妖巨大在线| heyzo一区| 亚洲高清精品中出| 国产99久久久国产精品免费看| www毛片com|