一篇文章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的流量消耗(上篇)

微信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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

通关这12个游戏,你就是编程大神,我不是开玩笑!

为了评选出将游戏和编程结合的最好的网站,我们对比了200多家类似站点。最终我们不负众望,精选出了12个最好的可以让你一边玩游戏一边学编程的网站。 Mybri...

40913
来自专栏coding

初识opensuse

1393
来自专栏BIT泽清

收起装13的苹果审核指南,就告诉你到底怎么能过!

本文为作者在遍览诸多苹果商店审核指南文后愤然写下,以最容易被拒的地方房卡麻将闲游(无版权号)移动端手游APP为例。

3325
来自专栏Java帮帮-微信公众号-技术文章全总结

​全球数据库排名/主流语言2017的改变

全球数据库排名 DB-Engines 发布了 2018 年 1 月份的数据库排名。排前 20 名的数据库中,Oracle 稳居第一,Redis 超过 Cassa...

3716
来自专栏飞总聊IT

从GitLab事件谈我的经历

先上个图,给各位程序猿们拜个年 ? 悲剧年年有,今年到GitLab家。著名的GitLab这几天在Tech界登上了头条,登上的原因是因为运维人员使用了rm -rf...

40210
来自专栏Cloud Native - 产品级敏捷

Story 场景树; 锻练开发人员 “简单设计” 的思维力

但是, 简单设计假如只是写写文档, 而不能指导开发, 这样的简单设计, 就只是在瞎折腾。

41111
来自专栏镁客网

朋友们再也不用担心你们的丑照没地方存了!

1724
来自专栏云加头条

云端架构师养成之三:微信也在用的消息队列服务

昨天(6月8日),腾讯云技术社区推出的《云端架构师养成系列分享》迎来了第三期,主角是腾讯云的消息服务。本期邀请到的嘉宾是腾讯云资深产品经理张浩和后台开发工程师张...

4488
来自专栏安恒信息

见招拆招 六招轻松抓住代维违规的“黑手”

所谓“代维”,是指企业将自己的IT系统外包给第三方进行包括系统配置、日常运维、系统管理等管理权限的操作。让专业的人干专业的事,这可以使企业本身从繁重的IT运维中...

3155
来自专栏Java帮帮-微信公众号-技术文章全总结

程序员如何快速适应新工作

一、要谦虚爱学习 对自己不熟悉的工具和方法要抱有谦虚的态度。新的工作就意味着学习新的东西。“知之为知之,不知为不知”,对自己不知道的东西要谦虚和诚实。并且要记住...

3627

扫码关注云+社区

领取腾讯云代金券