mmkv
MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。多进程同步实现是依靠文件锁
Android 存储优化 —— MMKV 集成与原理 - 掘金 (juejin.cn)
design · Tencent/MMKV Wiki (github.com)
android_ipc · Tencent/MMKV Wiki (github.com)
一些对比:
虽然 MMKV 一些场景下比 SP 稍慢(如: 首次实例化会进行数据的复写剔除重复数据, 比 SP 稍慢, 查询数据时存在 ProtocolBuffer 解码, 比 SP 稍慢), 但其逆天的数据写入速度、mmap Linux 内核保证数据的同步, 以及 ProtocolBuffer 编码带来的更小的本地存储空间占用等都是非常棒的闪光点
mmap:
官方简述:MMKV 本质上是将文件 mmap 到内存块中,将新增的 key-value 统统 append 到内存中;到达边界后,进行重整回写以腾出空间,空间还是不够的话,就 double 内存空间;对于内存文件中可能存在的重复键值,MMKV 只选用最后写入的作为有效键值。
ProtocolBuffer:
多进程同步:
MMKV 是采用 文件锁 的方式来进行进程间的同步操作
- LOCK_SH(共享锁): 多个进程可以使用同一把锁, 常被用作读共享锁
- LOCK_EX(排他锁): 同时只允许一个进程使用, 常被用作写锁
- LOCK_UN: 释放锁