一篇文章get微信開源移動端資料庫元件WCDB的一切!
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的流量消耗(上篇)》
《如約而至:微信自用的移動端IM網路層跨平臺元件庫Mars已正式開源》
《開源libco庫:單機千萬連線、支撐微信8億使用者的後臺框架基石 [原始碼下載]》
《微信新一代通訊安全解決方案:基於TLS1.3的MMTLS詳解》
《微信團隊原創分享:Android版微信後臺保活實戰分享(程式保活篇)》
《微信團隊原創分享:Android版微信後臺保活實戰分享(網路保活篇)》
《Android版微信從300KB到30MB的技術演進(PPT講稿) [附件下載]》
《微信團隊原創分享:Android版微信從300KB到30MB的技術演進》
《微信技術總監談架構:微信之道——大道至簡(PPT講稿) [附件下載]》
《微信海量使用者背後的後臺系統儲存架構(視訊+PPT) [附件下載]》
《微信非同步化改造實踐:8億月活、單機千萬連線背後的後臺解決方案》
《架構之道:3個程式設計師成就微信朋友圈日均10億釋出量[有視訊]》
《微信團隊原創分享:Android記憶體洩漏監控和優化技巧總結》
《微信團隊原創Android資源混淆工具:AndResGuard [有原始碼]》
《移動端IM實踐:Android版微信如何大幅提升互動效能(一)》
《移動端IM實踐:Android版微信如何大幅提升互動效能(二)》
《移動端IM實踐:WhatsApp、Line、微信的心跳策略分析》
《移動端IM實踐:谷歌訊息推送服務(GCM)研究(來自微信)》
《信鴿團隊原創:一起走過 iOS10 上訊息推送(APNS)的坑》
[2] 有關QQ、微信的技術故事:
《技術往事:創業初期的騰訊——16年前的冬天,誰動了馬化騰的程式碼》
《技術往事:史上最全QQ圖示變遷過程,追尋IM巨人的演進歷史》
《開發往事:深度講述2010到2015,微信一路風雨的背後》
《開發往事:記錄微信3.0版背後的故事(距微信1.0釋出9個月時)》
(本文同步釋出於:http://www.52im.net/thread-932-1-1.html)
相關文章
- 微信終端開源資料庫 WCDB – Swift 版本資料庫Swift
- 微信分享(移動web端)Web
- 關於移動端元件庫元件
- 微信小程式使用元件實現移動端軟鍵盤微信小程式元件
- Lesktop開源IM移動端:接入LayIM移動端UIUI
- 主流移動端元件庫的對比和分析元件
- 資料庫週刊31丨openGauss 正式開源;7月資料庫排行榜;浙江移動資料庫AntDB遷移……資料庫
- 一篇文章瞭解Redis資料庫Redis資料庫
- 微信雲開發資料庫連線資料庫
- 移動端Modal元件開發雜談元件
- 移動端實用資源整理
- Logan:美團點評的開源移動端基礎日誌庫
- 基於VUE+TypeScript 一個快速開發的移動端UI元件庫VueTypeScriptUI元件
- 移動端(微信)後退重新整理頁面
- 快速部署 微軟開源的 Garnet 鍵值資料庫微軟資料庫
- 微信小程式 #雲開發 #雲端儲存 #雲資料庫 #雲函式微信小程式資料庫函式
- Vant 1.0 釋出:輕量、可靠的移動端 Vue 元件庫Vue元件
- 用python wxpy管理微信公眾號,並利用微信獲取自己的開源資料。Python
- 美家美國際建材家博城微信移動端
- 【移動開發】Checkout開源庫原始碼解析移動開發原始碼
- 微信團隊分享:微信移動端的全文檢索多音字問題解決方案
- Vant 1.0 正式釋出:輕量、可靠的移動端 Vue 元件庫Vue元件
- Salesforce開源TransmogrifAI:用於結構化資料的端到端AutoML庫SalesforceAITOML
- 微信小程式父子元件之間的資料傳遞微信小程式元件
- Alibaba 資料庫遷移開源工具 Datax 安裝和使用資料庫開源工具
- 滴滴新出的移動端UI元件庫 Mand Mobile,提前蹭個熱度UI元件
- 開源資料庫流行度首次超過非開源資料庫Confluent資料庫
- 微信小程式中引用vant元件庫微信小程式元件
- 移動端左滑右滑元件元件
- 9.微信公眾平臺開發 - 資料庫操作資料庫
- beeshell:開源的 React Native 元件庫React Native元件
- 【移動端開發】移動端開發基礎問題
- 一篇文章搞懂 Android 元件化Android元件化
- ChatGPT “眼”中的開源資料庫ChatGPT資料庫
- 開源的誘惑——資料庫篇資料庫
- 想了解資料庫安全?看這一篇文章就夠了!資料庫
- 微信小程式優質資源彙總:開源框架、開源App和開源庫,總有一款適合你(1)微信小程式框架APP
- 【更新日誌】京東Vue移動端元件庫NutUI v2.1.0Vue元件UI
- 《吐血整理》系列 大廠前端元件庫工具集合(PC端、移動端、JS、CSS等)前端元件JSCSS