[转载] 微信移动端数据库组件WCDB系列(二)— 数据库修复三板斧

原文地址

前言

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

我们即将开源的移动数据库组件 WCDB (WeChat Database),致力于解决 DB 损坏导致数据丢失的问题。

之前的一篇文章《微信 SQLite 数据库修复实践》介绍了微信对SQLite数据库修复
以及降低损坏率的实践,这次再深入介绍一下微信数据库修复的具体方案和发展历程。

阅读全文 »

[转载] 微信移动端数据库组件WCDB系列(一)- iOS基础篇

原文地址

前言

WCDBWeChat DataBase)是微信官方的移动端数据库组件,致力于提供一个高效易用完整的移动端存储方案。

它包含三个模块:

  • WCDB-iOS/Mac
  • WCDB-Android
  • 数据库损坏修复工具WCDBRepair

目前正在筹备开源中。

阅读全文 »

转载 为什么要从FMDB迁移到WCDB

原文地址

背景

WCDB开源至今已两个月有余,我们在不断迭代功能、完善文档的同时,也与来自世界各地的开发者进行交流,帮助他们更快地了解、掌握WCDB。这其中,也不乏使用FMDB的开发者。他们正准备将项目的数据库模块改为WCDB。

对于一个已经上线运行的项目,数据库这类基础组件与业务的耦合通常较多,迁移有一定工作量的。因此,开发者通常会做很多预研,以确定是否进行迁移。

WCDB在Github的wiki上提供了专门的教程,帮助使用FMDB的开发者进行迁移。同时,也希望通过本文全面地介绍WCDB和FMDB在使用方式、性能等方面的差异,以及迁移中可能遇到的问题,帮助开发者决定是否进行迁移。

阅读全文 »

转载 微信iOS SQLite源码优化实践

原文地址

前言

随着微信iOS客户端业务的增长,在数据库上遇到的性能瓶颈也逐渐凸显。在微信的卡顿监控系统上,数据库相关的卡顿不断上升。而在用户侧也逐渐能感知到这种卡顿,尤其是有大量群聊、联系人和消息收发的重度用户。

我们在对SQLite进行优化的过程中发现,靠单纯地修改SQLite的参数配置,已经不能彻底解决问题。因此从6.3.16版本开始,我们合入了SQLite的源码,并开始进行源码层的优化。

本文将分享在SQLite源码上进行的多线程并发、I/O性能优化等,并介绍优化相关的SQLite原理。

阅读全文 »

[转载] 深入理解iOS Jetsam机制,助力提升Flotsam召回率

原文地址

导读

本文将深入介绍 iOS 系统中的 Jetsam 机制,探讨其原理和作用。Jetsam 机制负责在内存不足时终止进程以释放内存资源,了解 Jetsam 的工作原理和相关策略,可以帮助开发者优化应用程序的内存使用,提高 Flotsam 召回率。

Flotsam 是快手定义的指标,是指 iOS 上未被监控捕获到的前台异常退出,包括但不限于由于内存溢出引起的退出。与 Jetsam 不同,Flotsam 更多地关注那些零碎、尚未明确归因的异常退出。了解 Jetsam 的工作原理和相关策略,对开发者来说,不仅有助于优化应用内存使用,还能显著提高 Flotsam 召回率,进一步提升应用的稳定性和用户体验。

阅读全文 »

[转载] 高内聚,可靠软件设计的支柱

原文地址

【编者按】高内聚是软件架构中经常被忽视的基石。本文将介绍高内聚的含义,重要性和实现高内聚的方法,如遵循单一职责原则、分解复杂的类、保持内聚的操作集和避免”上帝”对象等。

阅读全文 »

[转载] 值得收藏!如何快速画出一幅漂亮的架构图

原文地址

导读

这篇文章总结了常用的架构图类型,可以借鉴笔者提供的模板,快速地产出符合业务需要的架构图。

为什么要画好一幅架构图?一幅漂亮的架构图既是创作者的深度结构化思考和表达,对于读者来说也更加容易理解架构所要表达的意思。

然而不擅长画图的程序员,在大脑里已经有了思路,如何快速能够产出精美的架构图呢?这篇文章帮你总结了常用的架构图类型,可以借鉴笔者提供的模板,快速地产出符合你的业务需要的架构图。

阅读全文 »

[转载] ARM汇编快速入门

本文主要分享如何快速上手ARM汇编开发的经验、汇编开发中常见的Bug以及Debug方法、用的Convolution Dephtwise算子的汇编实现相对于C++版本的加速效果三方面内容。

原文地址

阅读全文 »

[转载] 如何理解业务系统的复杂性?

原文地址

腾小云导读

业务系统复杂性一直是令开发者头痛的问题。复杂的不是增加一个需求需要耗费多少时间,而是在增加一个需求后带来的蝴蝶效应:其它功能会不会受到影响、要如何去找到这些影响,最终如何实现系统正常运行……功能之间隐秘增加的耦合、不可避免的代码腐化在导致业务复杂性增加。大家都在说的软件开发提效到底在提什么?程序员日常工作中应该如何提升开发效率?敏捷开发、瀑布流式开发孰是孰非?欢迎阅读。

阅读全文 »