对于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通过ORM和WINQ,体现了其易用性上的优势,使得数据库操作不再繁杂。同时,通过链式调用,开发者也能够方便地获取数据库操作的耗时等性能信息。而高级用法则扩展了WCDB的功能和用法。

WCDB源码下载

android微信wcdb,[资讯] 微信正式开源移动端数据库组件WCDB!相关推荐

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

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

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

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

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

    前言 ================================== WCDB(WeChat DataBase)是微信官方的移动端数据库组件,致力于提供一个高效.易用.完整的移动端存储方案. 它 ...

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

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

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

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

  6. 高斯数据库和oracle,华为openGauss数据库正式开源 华为高斯数据库与Oracle区别

    近期,华为正式宣告开源数据库才能,开放 openGauss 数据库源代码,并建立 openGauss 开源社区.社区官网(http://opengauss.org)同步上线. openGauss 是一 ...

  7. Thor UI - 轻量简洁的免费开源移动端 UI 组件库,支持原生小程序和 uni-app

    用来快速开发原生小程序或者通过 uni-app 来开发任何小程序甚至是 APP 的组件库,但我很好奇中文名是不是译作雷神 UI. Thor UI 介绍 Thor UI 是一款开发移动端网页应用.小程序 ...

  8. 商城系统(SpringBoot后端+Vue管理员前端+微信小程序)正式开源啦!

    一.项目介绍 mall是一套商城系统,包括 Spring Boot后端. Vue后台管理员前端 .微信小程序用户前端 . 主要功能有商品管理.订单管理.用户管理.商品收藏.加购物车.地址管理等. ma ...

  9. OnsenUI - 专为混合开发/手机 web 应用打造的开源移动端 UI 组件库

    具有原生应用外观的组件库,性能表现也非常不错,适合用来开发 App,值得关注和学习使用. 关于 Onsen UI Onsen UI 是一套专为移动应用设计的丰富的 UI 组件库,使用前端开发者熟悉的j ...

最新文章

  1. cesium 渲染分析(以太阳为例),实现卫星任务规划中地球赤道平面绘制
  2. Compiling Cpp(zz)
  3. Git:Rebase和Merge之间的区别,看完这篇文章你就懂了!
  4. java除号_Java的运算符
  5. SQL JOIN 简单介绍
  6. Qt不规则窗体和按键
  7. Apache Kylin 入门 1 - 基本概念
  8. 有效利用PLM系统能为企业带来什么?
  9. 三十岁it人的一些经历
  10. JVM——GC算法原理
  11. FCPX视频剪辑Final Cut Pro X v10.5.4中文版 Macbook支持Silicon M1 附详细安装教程
  12. 贴吧无耻霸屏技术! 几万阅读量的微信公众号都偷偷的使用它
  13. ubuntu18.04 分辨率突然变小,添加1920x1080分辨率,转完变卡默认成集显llvmpipe改独显方法
  14. 2021河南科技大学计算机考研科目,2021河南科技大学考研参考书目
  15. 【java基础练习】打印空心菱形
  16. ker矩阵是什么意思_矩阵分析(一):空间变换与基变换
  17. KeyBert、TextRank等九种本文关键词提取算法(KPE)原理及代码实现
  18. 什么是IPQC(制程控制)?
  19. 人脸识别接口_DS-K5603-Z 海康威视人员通道人脸识别组件 1万人脸库 10.1英寸LCD触摸显示屏_DS-K5603-Z_DS-K5603-Z...
  20. 我的世界服务器商店出购系统,我的世界1.8-1.9服务器商店shop插件

热门文章

  1. 使用EKF融合odometry及imu数据
  2. 如何巧妙的申请换部门_换部门申请书
  3. 数字转日期 pl/sql_PL / SQL程序检查数字是奇数还是偶数
  4. TRS全文检索开发文档及API,工具包
  5. 操作系统之寄存器——这篇寄存器讲的有点意思!
  6. 2016年国内开源镜像站点汇总
  7. 计算机课上最难忘的一幕
  8. linux挂载03磁盘,Linux_常用命令_03_磁盘/挂载_信息查看(示例代码)
  9. 【地球上最欢乐跑步活动】第四届草原马拉松彩跑节▪舞动青春 跑出色彩 千人篝火狂欢大型烟花表演
  10. npm 使用淘宝镜像及切换回官方源