微信项目IO优化:Jetpack DataStore 与MMKV实现高效持久化

咱们一起来看看mmkv

腾讯微信团队于2018年9月底宣布开源 MMKV ,原理上基于 mmap的一个高性能key-value 组件,数据的序列化/反序列化使用 protobuf 实现,主打高性能和稳定性,也支持了Android 平台。

**MMKV最新源码托管地址:**https://github.com/Tencent/MMKV

性能对比

我们将 MMKV 和 SharedPreferences、SQLite 进行对比,重复读写操作1万次。发现mmkv读写只需要3-4ms之间结果如下图

(来自官方:测试机器是 Pixel 2 XL 64G,Android 8.1,每组操作重复 1k 次,时间单位是 ms。)

可以看到,MMKV 的读写能力都远好于SharedPreferences以及SQLite。

大家肯定好奇,MMKV 是如何做到的呢? 这就是下面理解原理了。

咱们先看看传统的 SharedPreferences&SQLite如何存储磁盘的

app运行所在的进程 叫做用户进程,用户进程无法操作磁盘

试想下用户进程直接操作磁盘, 那linux就不是一个安全的系统了,因为linux是以文件为单位的操作系统,正是基于linux文件权限所以android才如此安全

用户进程在读写磁盘时,会将请求先交给内核进程,由内核进程读写磁盘,这就意味着需要切换进程状态而切换进程需要中断CPU 如下图:

传统方式总结: 用户进程切换内核进程比较耗时,当循环写入10000次时,这种耗时累计起来就非常客观了

那MMKV又是如何做的呢

MMKV是基于mmap函数实现的架构

mmap函数是将内存和磁盘建立好映射,一旦映射建立完成,内存上的映射区域的数据,会实时同步到磁盘中这样就节约了频繁切换内核进程造成的耗时

总结: 所以MMKV基本上可以秒杀市面上所有的存储框架了。做IO优化是不错的选择

最近Jetpack 新推出了DataStore 我们又该怎么理解DataStore 和MMKV的区别和用法呢

我们来看DataStore 又解决了什么问题呢?

Preferences DataStore 相比于 mmkv优点

  • DataStore 是Google 官方推荐的,可以更好的与 ROOM 配合
  • DataStore 与 Flow 更配,更适合 Kotlin/协程的环境
  • 对于从SharedPreferences 迁移,更加方便;
  • U 线程安全、类型安全等特性;

此外,Jetpack 还提供了 Proto DataStore,见名知意,主要是通过 pb 来做储存持久化,这点和 mmkv 比较类似,pb格式其实在各个大厂数据持久化中都会有涉及。如果现在你对MMKV和Jetpack DataStore还不够了解,现在想要在最短的时间里吃透它,

这里为了大家《Jetpack 全家桶》(内含Compose) 这一套体系的知识点,这里记录比较全比较细致的《Jetpack 入门到精通》(内含Compose) 学习笔记!!! 对Jetpose Compose这块感兴趣的小伙伴也可以参考学习下……

Jetpack 全家桶(Compose)

Jetpack 部分

  1. Jetpack之Lifecycle
  2. Jetpack之ViewModel
  3. Jetpack之DataBinding
  4. Jetpack之Navigation
  5. Jetpack之LiveData

Compose 部分
1.Jetpack Compose入门详解
2.Compose学习笔记
3.Compose 动画使用详解

猜你喜欢

转载自blog.csdn.net/weixin_61845324/article/details/131464679