有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

服务概述

TMF 统一存储组件提供完整的持久化存储解决方案,组件 SDK 提供多样的存储方式以满足不同的存储需求。目前 TMF 统一存储组件由数据库存储(WCDB)与 键值对存储(MMKV)及文件存储 三部分组成。
WCDB 是一个高效、完整、易用的移动数据库框架,基于 SQLCipher,支持 iOS,macOS 和 Android,提供数据库存储、键值对存储、文件存储三种存储方式。
MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。
文件存储是基于 Android 原生 File 封装的接口,提供了加解密读写文件的能力,提高了文件存储的简便性和安全性。

应用场景

TMF 统一存储技术,可以应用于所有涉及数据存储、数据持久化的业务。提供客户端持久化存储解决方案,底层提供多样化的存储方式以满足不同的存储需求,支持数据加密功能。可以视为传统数据存储的更优替代技术组件。

产品优势

数据库存储(WCDB)

TMF 统一存储组件中 WCDB 部分具有以下优势:
易用,WCDB 支持一句代码即可将数据取出并组合为 object。
WINQ(WCDB语言集成查询):通过 WINQ,开发者无须为了拼接 SQL 的字符串而写大量的胶水代码。
ORM(Object Relational MApping):WCDB 支持灵活、易用的 ORM。开发者可以很便捷地定义表、索引、约束,并进行增删改查操作。
高效,WCDB 通过框架层和 SQLCipher 源码优化,使其更高效的表现。
多线程高并发:WCDB 支持多线程读与读、读与写并发执行,写与写串行执行。 下面是 WCDB 与 FMDB 的一系列性能对比:
单线程:
读操作性能测试:该测试为从数据库中取出所有数据,并拼装为 object。


写操作性能测试:该测试为将 object 的数据不断插入到数据库中(不使用事务)。


批量写操作性能测试:该测试为将 object 的数据批量插入数据库(使用事务)。

WCDB 写操作和批量写操作的性能分别优于 FMDB 28% 和 180%。
多线程:
多线程读操作性能测试:该测试同时启动两个线程,分别从数据库中取出所有数据,并拼装为 object。


多线程读写操作性能测试:该测试同时启动两个线程,一个线程从数据库中取出所有数据,并拼装为 object;另一个将 object 的数据批量插入到数据库中。


多线程写操作性能测试:该测试同时启动两个线程,分别将 object 的数据批量插入数据库。


WCDB 的多线程读写操作性能优于 FMDB 62% ,而多线程读操作基本与 FMDB 持平。FMDB 在多线程写测试中,直接返回错误 SQLITE_BUSY,因此无法比较。而基于 SQLite 的机制,WCDB 的多线程写操作实质也是串行执行,但不会出错导致操作中断。
初始化:
初始化性能测试:该测试针对创建 SQLite 连接的初始化过程,即创建 SQLite 连接,并设置最基本的配置。SQLite 的初始化速度会根据表的数量而增加。


WCDB 通过针对性的优化,使得初始化性能优于 FMDB 107%。
完整,WCDB 覆盖了数据库相关各种场景的所需功能。
加密:WCDB 提供基于 SQLCipher 的数据库加密。
损坏修复:WCDB 内建了 Repair Kit 用于修复损坏的数据库。
反注入:WCDB 内建了对 SQL 注入的保护。

键值对存储(MMKV)

TMF 统一存储组件中 MMKV 部分性能极佳: 循环写入随机的 int 1千次,我们有如下性能对比:
下面是 iOS 端 MMKV 与 NSUserDefaults 性能对比:


下面是 Android 端 MMKV 与 SharedPreferences 性能对比:



文件存储(File)

文件存储基于 Android 原生 File,提供了加密能力,封装文件加解密/明文读写及文件删除接口,无需关注文件存储过程中繁杂的 try/catch 流程,提高了使用的简便性。