只看这一篇,你能够完全 get 微信移动端数据库 WCDB 的一切!

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的到目前为止一切细节,如果你有足够的耐心读完以下内容,相信你便会爱上这套微信开源的解决方案。

Q1. 面对五花八门的iOS数据库技术,WCDB为什么自己造了个轮子?

对于iOS开发者来说,数据库的技术选型一直是个令人头痛的问题。

由于Apple提供的CoreData框架差强人意,使得开发者们纷纷将目光投向开源社区,寻找更好的存储方案。

对于微信也是如此。数据库是微信内最基础的组件之一,消息收发、联系人、朋友圈等等业务都离不开数据库的支持。为了满足需求,我们也对现有方案做了对比研究后发现,发现已有方案都不能满足微信的要求。于是WCDB应运而生。

点击下方标题即可阅读全文↓

《微信移动端数据库组件WCDB系列(一)-iOS基础篇》

Q2. 数据库损坏问题,WCDB都提供了哪些方案? 长久以来SQLite DB都有损坏问题,从Android、iOS等移动系统,到Windows、Linux 等桌面系统都会出现。由于微信所有消息都保存在DB,服务端不保留备份,一旦损坏将导致用户消息被清空,显然不能接受。

WCDB (WeChat Database),致力于解决 DB 损坏导致数据丢失的问题,提供修复工具组合套拳。

点击下方标题即可阅读全文↓

《微信移动端数据库组件WCDB系列(二) — 数据库修复三板斧》 《微信SQLite数据库修复实践》

Q3. 即便是很复杂的查询,也可以通过一行代码完成。WCDB如何保证易用性?

WCDB通过WINQ抽象SQLite语法规则,使得开发者可以告别字符串拼接的胶水代码。通过和接口层的ORM结合,使得即便是很复杂的查询,也可以通过一行代码完成。并借助IDE的代码提示和编译检查的特性,大大提升了开发效率。同时还内建了反注入的保护。

虽然WINQ在实现上使用了C++11特性和模版等,但在使用过程并不需要涉及。对于熟悉SQL的开发,只需按照本能即可写出SQL对应的WINQ语句。最终达到提高WCDB易用性的目的。同时,基于C++的实现也使得WINQ在性能可以期待。

点击下方标题即可阅读全文↓

《微信移动端数据库组件WCDB系列(三) — WINQ原理篇》

Q4. WCDB Android有哪些的特色功能?

Android 由于接口跟系统几乎一样,相信大家都比较熟悉,不熟悉用法也可以到 Android Developer 官网看一下。但是,我们也有一些特色功能和优化大家可能不容易注意到, 例如加密接口、数据迁移、全文搜索分词器与动态ICU加载、日志重定向与性能监控、优化Cursor实现,现在就单独拿出来说说。

点击下方标题即可阅读全文↓

《微信移动数据库组件WCDB(四) — Android 特性篇》 《微信ANDROID客户端-会话速度提升70%的背后》

Q5: 为了让开发者更快上手,WCDB为开源做了哪些改变?

Android 和 iOS 的数据库在有了跨平台组件的想法和实践经验,思考问题更多从方案通用性的方向考量。为了更好地共享成果,Android 与 iOS 数据库组件 WCDB 经过重构后脱离各自的业务逻辑,变成一个独立的,专注的,可推广的组件,最终以开源的形式与大家相见。

点击下方标题即可阅读全文↓

《微信WCDB进化之路 - 开源与开始》

最新版本(更新日期7.4)

V1.0.2

iOS版本

  • 性能优化
  • 将内置 NSData 或 NSMutableData column coding 更改为原始数据格式。要兼容早期版本,请调用 [WCTCompatible sharedCompatible].builtinNSDataColumnCodingCompatibleEnabled = YES.
  • 增加attach, detach, vacuum, savepoiint, rollback, release, reindex, explain 语句和 SQLCipher 相关的编译指示
  • 移除 insertOrReplace 的自动增量
  • 将 updateTable 重命名为 updateRowsInTables, 并将 statictics(typo) 重命名为 statistics.
  • 一些小的 bug 修复

Android版本

  • 性能优化
  • 将 ProGuard 规则 Expose 给 AAR 包。修复 minify 在 gradle 启用时崩溃的问题。

读到这儿,相信你已经能够感受微信WCDB团队的用心和专业:“希望能够持续优化WCDB,将这个问题解决到极致。多年后再提起客户端数据库,不需要引起任何热度和讨论,用WCDB就解决了。”

目前微信开源的项目已实现内外部同步,Github上的改进最终也会原封不动的在微信开发中使用。因此,希望你可以提出issue和PR,微信会因你更好。

转载自【腾讯开源】公众号,腾讯官方开源资讯,期待您的关注。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

物联网安全研究之二:IoT系统攻击面定义分析

在前文中,我们了解了IoT技术的基本架构,本文我将来说说IoT安全,在此过程中,我们会尝试定义一种新方法来理解IoT安全,同时也会创建一个结构化流程来方便认知I...

3839
来自专栏FreeBuf

独家: iOS是如何收集用户的地理信息的

从央视的新闻里我们了解到这个故事应该从三年前讲起: 2011年两名英国的工程师发现苹果手机暗藏的一个文件可以记录苹果手机用户曾经去过的地理位置,并通过隐藏文件...

21910
来自专栏顶级程序员

10位顶级PHP大师的开发原则

来源:Andrew 译 ,译者网站已经停止运营 网址:http://net.tutsplus.com/tutorials/php/10-principles-...

3705
来自专栏java一日一条

这样的开源应用你相信它吗?

任何读过马修•加勒特作品的人都知道很多专门用来销售的软件是不靠谱的。一些Linux倡导者宣称开放自由而且免费的软件比封闭的专门用来谋利的软件更安全,然而这里有一...

962
来自专栏腾讯Bugly的专栏

【Dev Club分享】React Native项目实战总结。

“8小时内拼工作,8小时外拼成长”这是大家共同的理想。除了每天忙于工作外,我们都希望能更多地区吸收领域内的新知识与新技能,从而走向人生巅峰。 Dev Club...

4388
来自专栏FreeBuf

揭秘:充电宝是如何盗取你的个人隐私的?

中午吃完饭,看到一个微博中别人转的央视新闻《别被改装充电宝盗取隐私》觉得又是啥高大上的东西上了央视,看完后才知道是数字公司的某研究员做的伪装充电宝盗取隐私的玩意...

2557
来自专栏应用案例

一次支付系统升级过程经验教训分享

一、主题分享 大家好!我今天讲的不是什么高深的技术或者产品设计,只是前一段时间发生的真实的上线过程。大家就权当我讲一个故事。里面涉及的技术也比较简单,请大家可以...

2248
来自专栏花叔的专栏

解读最新小程序跳转方式,请叫我预言花

本文未经允许.......可随意转发^_^!! 话说,小程序团队是打算每个节日发布一个新特性么?61儿童节运营方的礼物来了: 公众号文章内支持小程序跳转的文字链...

6237
来自专栏开源项目

【码云周刊第 10 期】放码过来,四个男人的带头冲锋!!

一周热门资讯回顾 码云全面改版:新界面新态度,更一致的体验 DuangDuangDuang!码云项目的 Readme.md 特殊技能 微软技术透明中心...

4007
来自专栏应用案例

作为一个有追求的程序员,你应该掌握的七种武器

1 科学上网 虽然国内互联网一片热闹的景象,但我们不得不承认,从硬件到软件,从协议到标准,我们现在使用的绝大部分技术都是起源于墙外,而Google是检索这些第一...

20910

扫码关注云+社区

领取腾讯云代金券