只看这一篇,你能够完全 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 条评论
登录 后参与评论

相关文章

来自专栏web前端教室

WEB前端架构(四)

今天是第三天,把购物车的基本功能算是都写完了。 这东西吧,思路想清楚之后,其实不难实现。 就是里面的逻辑交互很多,来来回回的,神烦啊,, 每一步每个操作都是对数...

2069
来自专栏沈唁志

整合ThinkPHP功能系列之微信公众号支付

1995
来自专栏cloudskyme

前端框架你究竟选什么

在做web开发的时候难免遇到一个问题,那就是,选择什么样的框架。下面把前端的框架简单的列一下。 1、flex Apache基金会今天发布了Flex 4.8版本,...

3556
来自专栏杨建荣的学习笔记

一次数据变更的审核过程(r8笔记第95天)

今天正在做一个数据变更操作,突然一个开发的同学找到我,看起来比较着急的样子,说想让我做一个数据变更。 当然在这种时候,我正在做的数据变更操作已经被打断了...

2527
来自专栏魏琼东

基于AgileEAS.NET SOA 中间件领域模型数据器快速打造自己的代码生成器

一、前言      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速...

3576
来自专栏SAP最佳业务实践

SAP最佳业务实践:SD–带质量管理的销售退货(237)-4退货质检

一、QA32对接收货物进行质量检验 在收到退货过账到退货状态之后,对物料进行质量检验。将退回的货物收货过账时,系统将自动创建检验批。质量检验后,再进行进一步的处...

3284
来自专栏LET

可视化之Berkeley Earth

1427
来自专栏TAPD

今天起,做一个人见人爱的程序员

? ? 新媒体管家 ? 测试妹子 ? 程序猿,你看看你写的commit message,清一色的update、fixed,完全不写代码改了什么,这让我们怎么快...

774
来自专栏厦门SEO

网站速度优化之“动静分离”、有效减轻后端服务器压力!

在介绍动静分离之前,我感觉还是有必要介绍一下:什么是静态网站?什么是动态网站?由于我之前已经在一篇个人博客中详细介绍了动静态网站,在这里就不再做详细的描述(有需...

1589
来自专栏知晓程序

小程序用起来耗流量吗? | 小程序问答 #5

1012

扫码关注云+社区