前言

==================================

WCDB(WeChat DataBase)是微信官方的移动端数据库组件,致力于提供一个高效、易用、完整的移动端存储方案。
它包含三个模块:
WCDB-iOS/Mac
WCDB-Android
数据库损坏修复工具WCDBRepair
目前正在筹备开源中。

背景

==================================

对于iOS开发者来说,数据库的技术选型一直是个令人头痛的问题。
由于Apple提供的CoreData框架差强人意,使得开发者们纷纷将目光投向开源社区,寻找更好的存储方案。
对于微信也是如此。数据库是微信内最基础的组件之一,消息收发、联系人、朋友圈等等业务都离不开数据库的支持。为了满足需求,我们也对现有方案做了对比研究:
目前移动端数据库方案按其实现可分为两类,

关系型数据库,代表有CoreData、FMDB等。

  • CoreData, 它是苹果内建框架,和Xcode深度结合,可以很方便进行ORM;但其上手学习成本较高,不容易掌握。稳定性也堪忧,很容易crash;多线程的支持也比较鸡肋。
  • FMDB ,它基于SQLite封装,对于有SQLite和ObjC基础的开发者来说,简单易懂,可以直接上手;而缺点也正是在此,FMDB只是将SQLite的C接口封装成了ObjC接口,没有做太多别的优化,即所谓的胶水代码(Glue Code)。使用过程需要用大量的代码拼接SQL、拼装Object,并不方便。

key-value数据库,代表有Realm、LevelDB、RocksDB等。

  • Realm, 因其在各平台封装、优化的优势,比较受移动开发者的欢迎。对于iOS开发者,key-value的实现直接易懂,可以像使用NSDictionary一样使用Realm。并且ORM彻底,省去了拼装Object的过程。但其对代码侵入性很强,Realm要求类继承RLMObject的基类。这对于单继承的ObjC,意味着不能再继承其他自定义的子类。同时,key-value数据库对较为复杂的查询场景也比较无力。

可见,各个方案都有其独特的优势及劣势,没有最好的,只有最适合的。
而对于微信来说,我们所期望的数据库应满足:

高效;增删改查的高效是数据库最基本的要求。除此之外,我们还希望能够支持多个线程高并发地操作数据库,以应对微信频繁收发消息的场景。
易用;这是微信开源的原则,也是WCDB的原则。SQLite本不是一个易用的组件:为了完成一个查询,往往我们需要写很多拼接字符串、组装Object的胶水代码。这些代码冗长繁杂,而且容易出错,我们希望组件能统一完成这些任务。
完整;数据库操作是一个复杂的场景,我们希望数据库组件能完整覆盖各种场景。包括数据库损坏、监控统计、复杂的查询、反注入等。

显然,上述各个方案都不能完全满足微信的需求。
于是,我们造了这个“轮子” - WCDB-iOS/Mac

WCDB-iOS/Mac
原文地址:https://mp.weixin.qq.com/s/1XxcrsR2HKam9ytNk8vmGw

微信移动端数据库组件WCDB系列(一)-iOS基础篇相关推荐

  1. 微信移动端数据库组件WCDB系列(二) — 数据库修复三板斧

    前言 长久以来SQLite DB都有损坏问题,从Android.iOS等移动系统,到Windows.Linux 等桌面系统都会出现.由于微信所有消息都保存在DB,服务端不保留备份,一旦损坏将导致用户消 ...

  2. 微信移动端数据库组件 WCDB 系列(三) — 解析 WINQ 原理

    背景 高效.完整.易用是 WCDB 的基本原则.前几篇文章分享了 WCDB 的基本用法和修复工具,接下来将更深入地聊聊 WCDB 在易用性上的思考和实践. 对于各类客户端数据库,似乎都绕不开拼接字符串 ...

  3. android微信wcdb,一篇文章get微信开源移动端数据库组件WCDB的一切!

    1.前言 微信团队已于2017年06月09日正式开源了微信自用的移动端数据库组件 WCDB(WeChat Database),详见<[资讯] 微信正式开源移动端数据库组件WCDB!>. W ...

  4. android微信wcdb,[资讯] 微信正式开源移动端数据库组件WCDB!

    对于iOS开发者来说,数据库的技术选型一直是个令人头痛的问题.由于Apple提供的CoreData框架差强人意,使得开发者们纷纷将目光投向开源社区,寻找更好的存储方案. 对于微信也是如此.数据库是微信 ...

  5. android重定义cursor,微信移动数据库组件WCDB(四) — Android 特性篇

    微信的移动端数据库组件 WCDB 已经正式开源了,有关注的小伙伴可能已经用上了.如果还没用上,可以翻到文末关注我们的 GitHub 和公众号其他文章. 之前我们已经发过几篇 iOS 和修复的文章,An ...

  6. 手摸手,带你用vue撸后台 系列一(基础篇) - 掘金

    完整项目地址:vue-element-admin 系列文章: 手摸手,带你用 vue 撸后台 系列一(基础篇) 手摸手,带你用 vue 撸后台 系列二(登录权限篇) 手摸手,带你用 vue 撸后台 系 ...

  7. 视频教程-Linux系列课程(基础篇)-Linux

    Linux系列课程(基础篇) 2年JavaEE开发 ,5年资深大数据开发大牛,曾就职于蓝点科技,擅长精准广告系统开发,精通Linux操作系统! 具备丰富的大数据研发和培训经验,熟练运用Hadoop和S ...

  8. QT/C++从新手到老手系列之QT基础篇-李浩林-专题视频课程

    QT/C++从新手到老手系列之QT基础篇-1620人已学习 课程介绍         本系列课程励志于带领你学习QT5/C++,从开发环境(QTCreator和VS2013两种)搭建到实际项目实战,从 ...

  9. 调试器工作原理系列一: 基础篇

    调试器工作原理系列一: 基础篇 本文是一系列探究调试器工作原理的文章的第一篇.我还不确定这个系列需要包括多少篇文章以及它们所涵盖的主题,但我打算从基础知识开始说起. 关于本文 我打算在这篇文章中介绍关 ...

最新文章

  1. kali系统破解WPA密码实战
  2. 如何支持亿级用户分流实验?AB实验平台在爱奇艺的实践
  3. 【译】Getting Started With Ethereum and Building a Basic Dapp — Part 2
  4. 【Centos 8】【Centos 7】安装 docker
  5. python处理windows弹窗_Python窗口IDE的基本处理,pythonwindowide
  6. 跳转指令微型计算机,哪种类型的汇编程序跳转指令最有用?
  7. 创建mysql视图语法正确的是_MySQL创建视图的语法格式
  8. mysql 导入 xc2 xa0_Python 字符串处理特殊空格xc2xa0tn Non-breaking space
  9. 使用shell实现zookeeper集群的自动搭建
  10. dll编译为html,如何为MSHTML v9编译.dll。我目前正在获取“MIDL 2035:预期的常量表达式”的100个错误...
  11. 1 熊猫烧香病毒分析
  12. arduino蓝牙通讯代码_Arduino蓝牙模块实现通信
  13. 航信eterm指令_Eterm常用指令
  14. 【数据挖掘】通用论坛正文提取
  15. 蚁群算法(实验分析)
  16. 【Translate插件】报错:更新TTK失败,请检查网络连接问题
  17. HTML网页设计制作大作业(div+css)--(四大名著 5页 )
  18. 创建 Time Machine 时间机器的备份至 openmediavault 5(OMV 5) NAS 的 SMB/CIFS 共享文件夹
  19. Remix本地环境搭建
  20. 斯坦福 AI 课程 10 年发展史

热门文章

  1. 喜欢、爱(不太同意)
  2. 【中秋福利文末Kotlin书籍免费送】程序员30 岁之后:如何实现质的突破?
  3. 英雄卡(输入计数)【标记思想】
  4. 【计算机与UNIX汇编原理⑦】——DOS/BIOS功能调用【实现两数相加 + Hello World】
  5. phoenix 优势
  6. 基本图片格式特点和区别(bmp/tif/png/jpg/gif/webp/ico/svg/raw)
  7. 什么软件可以测试抖音文案,寻找抖音热门文案其实很简单
  8. 诊断CAPL自动化(8)——封装的读取/检查DTC函数库,覆盖了所有的测试场景
  9. 《设计模式之禅》之六大设计原则
  10. c语言16左移3位,点阵16*32综合(间断、上移、下移、左移、右移、左拉、右拉)C程序...