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: 释放锁
Author

white crow

Posted on

2021-10-28

Updated on

2024-04-24

Licensed under