统一存储简介
服务概述
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 的字符串而写一大坨胶水代码。
- 高效,WCDB 通过框架层和 SQLCipher 源码优化,使其更高效的表现。
- 多线程高并发:WCDB 支持多线程读与读、读与写并发执行,写与写串行执行。
下面是 WCDB 与 FMDB 的一系列性能对比:
- 单线程:
- 多线程:
- 多线程读操作性能测试:该测试同时启动两个线程,分别从数据库中取出所有数据,并拼装为object。
- 多线程读写操作性能测试:该测试同时启动两个线程,一个线程从数据库中取出所有数据,并拼装为 object;另一个将 object 的数据批量插入到数据库中。
- 多线程写操作性能测试:该测试同时启动两个线程,分别将 object 的数据批量插入数据库。
- WCDB 的多线程读写操作性能优于 FMDB 62% ,而多线程读操作基本与 FMDB 持平。FMDB 在多线程写测试中,直接返回错误 SQLITE_BUSY,因此无法比较。而基于 SQLite 的机制,WCDB 的多线程写操作实质也是串行执行,但不会出错导致操作中断。
- 初始化:
- 多线程高并发:WCDB 支持多线程读与读、读与写并发执行,写与写串行执行。
下面是 WCDB 与 FMDB 的一系列性能对比:
- 完整,WCDB 覆盖了数据库相关各种场景的所需功能。
- 加密:WCDB 提供基于 SQLCipher 的数据库加密。
- 损坏修复:WCDB 内建了 Repair Kit 用于修复损坏的数据库。
- 反注入:WCDB 内建了对 SQL 注入的保护。
键值对存储(MMKV)
TMF 统一存储组件中 MMKV 部分性能极佳:
循环写入随机的 int 1千次,我们有如下性能对比:
文件存储(File)
文件存储基于系统原生文件操作,提供了加密能力,封装文件加解密/明文读写及文件删除接口,无需关注文件存储过程中繁杂的try/catch流程,提高了使用的简便性。