一篇文章get微信開源移動端資料庫元件WCDB的一切!

jsjsjjs發表於2017-07-22

1、前言

微信團隊已於2017年06月09日正式開源了微信自用的移動端資料庫元件 WCDB(WeChat Database),詳見《[資訊] 微信正式開源移動端資料庫元件WCDB!》。

WCDB是微信終端的第三個開源專案。至此,微信分享出去的程式碼包括了熱更新(即微信Tinker)、網路基礎元件(詳見《如約而至:微信自用的移動端IM網路層跨平臺元件庫Mars已正式開源》)和資料庫(也就是本文所說的WCDB元件),可以說是壓箱底的東西都拿了出來。

說起WCDB,它是在WeChat應用程式中使用的高效,完整,易於使用的移動資料庫框架,它目前在iOS,MacOS和Android上可用。

Github地址:https://github.com/Tencent/wcdb

Star數量:3312

依託微信的使用者量和對資料庫的重度依賴,WCDB直擊移動端資料庫在iOS和Android平臺存在的不同問題。在Android上,由於 SDK 提供的支援尚可,而且使用 NDK 開發不便,自然選擇系統 API 介面進行開發,提供加密介面、資料遷移、日誌重定向和各種跟蹤設定等功能。 iOS 情況則有不同:系統提供的CoreData 學習成本很高、效能一般,並不那麼好用,因此提升易用性、保持高效和完整,則是適用於iOS的WCDB設計的重點。

客戶端資料庫並不是什麼“性感”的技術,比起前段時間備受關注的熱更新或去年以來的AI、AR/VR等等,資料庫的熱度並不高,不過…

本文收錄了關於微信移動端資料庫WCDB的到目前為止一切細節,如果你有足夠的耐心讀完以下內容,相信你便會愛上這套微信開源的解決方案。

(本文同步釋出於:http://www.52im.net/thread-932-1-1.html

2、WCDB簡介

WCDB是一個高效、完整、易用的移動資料庫框架,基於 SQLCipher,支援 iOS、macOS 和 Android。微信高階工程師何俊偉表示:“開源只是故事的開始,我們仍會持續對 WCDB 做改進,包括更易用的介面、更好的效能、更高的可靠性。這些改進最終也會原封不動地在微信使用。”

WCDB(WeChat DataBase)是微信官方的移動端資料庫元件,致力於提供一個高效、易用、完整的移動端儲存方案。

它包含三個模組:

WCDB-iOS/Mac;

WCDB-Android;

資料庫損壞修復工具WCDBRepair。

更多介紹,詳見《[資訊] 微信移動端資料庫元件WCDB即將開源!》。

3、面對五花八門的iOS資料庫技術,WCDB為什麼自己造了個輪子?

對於iOS開發者來說,資料庫的技術選型一直是個令人頭痛的問題。由於Apple提供的CoreData框架差強人意,使得開發者們紛紛將目光投向開源社群,尋找更好的儲存方案。

對於微信也是如此。資料庫是微信內最基礎的元件之一,訊息收發、聯絡人、朋友圈等等業務都離不開資料庫的支援。為了滿足需求,我們也對現有方案做了對比研究後發現,發現已有方案都不能滿足微信的要求,於是WCDB應運而生。

詳見:《微信移動端資料庫元件WCDB系列(一)-iOS基礎篇

4、資料庫損壞問題,WCDB都提供了哪些方案?

長久以來SQLite DB都有損壞問題,從Android、iOS等移動系統,到Windows、Linux 等桌面系統都會出現。由於微信所有訊息都儲存在DB,服務端不保留備份,一旦損壞將導致使用者訊息被清空,顯然不能接受。

WCDB (WeChat Database),致力於解決 DB 損壞導致資料丟失的問題,提供修復工具組合套拳。

微信團隊發表的相關文章如下:

微信移動端資料庫元件WCDB系列(二) — 資料庫修復三板斧

微信團隊原創分享:微信客戶端SQLite資料庫損壞修復實踐

5、即便是很複雜的查詢,也可以通過一行程式碼完成:WCDB如何保證易用性?

WCDB通過WINQ抽象SQLite語法規則,使得開發者可以告別字串拼接的膠水程式碼。通過和介面層的ORM結合,使得即便是很複雜的查詢,也可以通過一行程式碼完成。並藉助IDE的程式碼提示和編譯檢查的特性,大大提升了開發效率。同時還內建了反注入的保護。

雖然WINQ在實現上使用了C++11特性和模版等,但在使用過程並不需要涉及。對於熟悉SQL的開發,只需按照本能即可寫出SQL對應的WINQ語句。最終達到提高WCDB易用性的目的。同時,基於C++的實現也使得WINQ在效能可以期待。

詳見:《微信移動端資料庫元件WCDB系列(三) — WINQ原理篇

6、WCDB Android有哪些的特色功能?

Android 由於介面跟系統幾乎一樣,相信大家都比較熟悉,不熟悉用法也可以到 Android Developer 官網看一下。但是,我們也有一些特色功能和優化大家可能不容易注意到, 例如加密介面、資料遷移、全文搜尋分詞器與動態ICU載入、日誌重定向與效能監控、優化Cursor實現,現在就單獨拿出來說說。

相關文章如下:

微信移動資料庫元件WCDB(四) — Android 特性篇

移動端IM實踐:Android版微信如何大幅提升互動效能(一)

移動端IM實踐:Android版微信如何大幅提升互動效能(二)

7、為了讓開發者更快上手,WCDB為開源做了哪些改變?

Android 和 iOS 的資料庫在有了跨平臺元件的想法和實踐經驗,思考問題更多從方案通用性的方向考量。為了更好地共享成果,Android 與 iOS 資料庫元件 WCDB 經過重構後脫離各自的業務邏輯,變成一個獨立的,專注的,可推廣的元件,最終以開源的形式與大家相見。

詳見:《微信WCDB進化之路 – 開源與開始

8、寫在最後

讀到這兒,相信你已經能夠感受微信WCDB團隊的用心和專業:“希望能夠持續優化WCDB,將這個問題解決到極致。多年後再提起客戶端資料庫,不需要引起任何熱度和討論,用WCDB就解決了。”

目前微信開源的專案已實現內外部同步,Github上的改進最終也會原封不動的在微信開發中使用。因此,希望你可以提出issue和PR,微信會因你更好。(原文連結:點此進入

9、附錄:更多QQ、微信技術文章

[1] 有關QQ、微信的技術文章:

微信客戶端團隊負責人技術訪談:如何著手客戶端效能監控和優化

微信後臺基於時間序的海量資料冷熱分級架構設計實踐

微信團隊原創分享:Android版微信的臃腫之困與模組化實踐之路

微信後臺團隊:微信後臺非同步訊息佇列的優化升級實踐分享

微信團隊原創分享:微信客戶端SQLite資料庫損壞修復實踐

騰訊原創分享(一):如何大幅提升行動網路下手機QQ的圖片傳輸速度和成功率

騰訊原創分享(二):如何大幅壓縮行動網路下APP的流量消耗(下篇)

騰訊原創分享(二):如何大幅壓縮行動網路下APP的流量消耗(上篇)

微信Mars:微信內部正在使用的網路層封裝庫,即將開源

如約而至:微信自用的移動端IM網路層跨平臺元件庫Mars已正式開源

開源libco庫:單機千萬連線、支撐微信8億使用者的後臺框架基石 [原始碼下載]

微信新一代通訊安全解決方案:基於TLS1.3的MMTLS詳解

微信團隊原創分享:Android版微信後臺保活實戰分享(程式保活篇)

微信團隊原創分享:Android版微信後臺保活實戰分享(網路保活篇)

Android版微信從300KB到30MB的技術演進(PPT講稿) [附件下載]

微信團隊原創分享:Android版微信從300KB到30MB的技術演進

微信技術總監談架構:微信之道——大道至簡(演講全文)

微信技術總監談架構:微信之道——大道至簡(PPT講稿) [附件下載]

如何解讀《微信技術總監談架構:微信之道——大道至簡》

微信海量使用者背後的後臺系統儲存架構(視訊+PPT) [附件下載]

微信非同步化改造實踐:8億月活、單機千萬連線背後的後臺解決方案

微信朋友圈海量技術之道PPT [附件下載]

微信對網路影響的技術試驗及分析(論文全文)

一份微信後臺技術架構的總結性筆記

架構之道:3個程式設計師成就微信朋友圈日均10億釋出量[有視訊]

快速裂變:見證微信強大後臺架構從0到1的演進歷程(一)

快速裂變:見證微信強大後臺架構從0到1的演進歷程(二)

微信團隊原創分享:Android記憶體洩漏監控和優化技巧總結

全面總結iOS版微信升級iOS9遇到的各種“坑”

微信團隊原創資源混淆工具:讓你的APK立減1M

微信團隊原創Android資源混淆工具:AndResGuard [有原始碼]

Android版微信安裝包“減肥”實戰記錄

iOS版微信安裝包“減肥”實戰記錄

移動端IM實踐:iOS版微信介面卡頓監測方案

微信“紅包照片”背後的技術難題

移動端IM實踐:iOS版微信小視訊功能技術方案實錄

移動端IM實踐:Android版微信如何大幅提升互動效能(一)

移動端IM實踐:Android版微信如何大幅提升互動效能(二)

移動端IM實踐:實現Android版微信的智慧心跳機制

移動端IM實踐:WhatsApp、Line、微信的心跳策略分析

移動端IM實踐:谷歌訊息推送服務(GCM)研究(來自微信)

移動端IM實踐:iOS版微信的多裝置字型適配方案探討

信鴿團隊原創:一起走過 iOS10 上訊息推送(APNS)的坑

>>更多同類文章 ……

[2] 有關QQ、微信的技術故事:

技術往事:創業初期的騰訊——16年前的冬天,誰動了馬化騰的程式碼

技術往事:史上最全QQ圖示變遷過程,追尋IM巨人的演進歷史

技術往事:“QQ群”和“微信紅包”是怎麼來的?

開發往事:深度講述2010到2015,微信一路風雨的背後

開發往事:微信千年不變的那張閃屏圖片的由來

開發往事:記錄微信3.0版背後的故事(距微信1.0釋出9個月時)

一個微信實習生自述:我眼中的微信開發團隊

>>更多同類文章 ……

(本文同步釋出於:http://www.52im.net/thread-932-1-1.html


相關文章