鸿蒙app 开发 高效的 存储 数据 推荐使用 @tencent/mmkv(V2.1.0):

devtools/2025/3/14 16:20:46/

参考链接

@tencent/mmkv(V2.1.0) 的原理

@tencent/mmkv 是基于腾讯 MMKV 原生库适配而来的,在鸿蒙 App 开发中使用时,其核心原理和原生 MMKV 库基本一致,下面从数据存储、读写性能优化、线程安全、数据持久化等方面来详细介绍其原理:

1. 数据存储结构

  • 内存映射文件(Memory - Mapped Files):MMKV 主要利用内存映射文件机制来实现数据的存储。内存映射文件允许程序直接将文件的内容映射到进程的虚拟地址空间中,这样文件就可以像数组一样被访问,避免了频繁的文件 I/O 操作。例如,当你在鸿蒙 App 中使用 mmkv.set(key, value) 存储数据时,MMKV 会先将数据写入到内存映射区域,后续会根据策略将内存中的数据同步到磁盘文件。
  • B+ 树索引:为了高效地管理键值对,MMKV 采用 B+ 树作为索引结构。B+ 树是一种平衡的多路搜索树,它具有良好的查找、插入和删除性能。在存储大量键值对时,B+ 树可以快速定位到指定键对应的数据位置,提高读写效率。

2. 读写性能优化

  • 增量更新:MMKV 在更新数据时采用增量更新的方式。当你修改某个键的值时,MMKV 不会重写整个文件,而是只更新该键对应的数据块,这样可以减少磁盘 I/O 操作,提高写入性能。
  • 并发读写:MMKV 支持并发读写操作。在多线程环境下,不同线程可以同时对不同的键进行读写操作,并且通过锁机制保证数据的一致性。例如,在鸿蒙 App 的多线程任务中,不同线程可以同时对 MMKV 进行读写,而不会出现数据混乱的情况。

3. 线程安全

  • 读写锁机制:为了保证多线程环境下的数据安全,MMKV 使用了读写锁(Read - Write Lock)机制。读写锁允许多个线程同时进行读操作,但在进行写操作时会独占锁,防止其他线程同时进行读写操作。例如,在鸿蒙 App 中,如果一个线程正在写入数据,其他线程会被阻塞,直到写操作完成。
  • 原子操作:对于一些简单的数据操作,MMKV 使用原子操作来保证线程安全。原子操作是不可分割的操作,在执行过程中不会被其他线程打断。例如,对计数器的增减操作可以使用原子操作来实现,避免出现竞态条件。

4. 数据持久化

  • 定期同步:MMKV 会定期将内存中的数据同步到磁盘文件中,以确保数据的持久化。同步的时间间隔可以根据实际情况进行调整,在保证数据安全的同时,尽量减少对性能的影响。
  • 异常处理:在遇到异常情况(如系统崩溃、应用异常退出)时,MMKV 会在下次启动时进行数据恢复。它会检查磁盘文件的完整性,并尝试修复损坏的数据,保证数据的一致性和可用性。

5. 兼容性和可扩展性

  • 跨平台支持:MMKV 是一个跨平台的库,不仅可以在鸿蒙系统中使用,还可以在 Android、iOS 等其他平台上使用。这使得开发者可以在不同平台的应用中复用代码,提高开发效率。
  • 数据类型支持:MMKV 支持多种数据类型的存储,包括字符串、整数、浮点数、布尔值等。开发者可以方便地存储和读取不同类型的数据,满足各种应用场景的需求。

综上所述,@tencent/mmkv(V2.1.0) 在鸿蒙 App 开发中通过内存映射文件、B+ 树索引、读写锁机制等技术,实现了高效的数据存储、读写和持久化,同时保证了线程安全和跨平台兼容性。


http://www.ppmy.cn/devtools/167063.html

相关文章

蓝桥杯省赛真题C++B组2024-握手问题

一、题目 【问题描述】 小蓝组织了一场算法交流会议,总共有 50 人参加了本次会议。在会议上,大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手(且仅有一次)。但有 7 个人,这 7 人彼此之间没有进行握手(但这…

Fiora聊天系统本地化部署:Docker搭建与远程在线聊天的实践指南

文章目录 前言1.关于Fiora2.安装Docker3.本地部署Fiora4.使用Fiora5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 这个通讯软件泛滥的时代,每天都在刷着同样的朋友圈、看着千篇一律的表情包,是不是觉得有点腻了&#…

QT系列教程(18) MVC结构之QItemSelectionModel模型介绍

视频教程 https://www.bilibili.com/video/BV1FP4y1z75U/?vd_source8be9e83424c2ed2c9b2a3ed1d01385e9 QItemSelectionModel Qt的MVC结构支持多个View共享同一个model,包括该model的选中状态等。我们可以通过设置QItemSelectionModel,来更改View的选…

双指针算法介绍+算法练习(2025)

一、介绍双指针算法 双指针(或称为双索引)算法是一种高效的算法技巧,常用于处理数组或链表等线性数据结构。它通过使用两个指针来遍历数据,从而减少时间复杂度,避免使用嵌套循环。双指针算法在解决诸如查找、排序、去重…

详细解析 ListView_GetEditControl()

书籍:《Visual C 2017从入门到精通》的2.3.8 Win32控件编程 环境:visual studio 2022 内容:【例2.28】支持主项可编辑的列表视图控件 说明:以下内容大部分来自腾讯元宝。 ​函数原型 HWND ListView_GetEditControl(HWND hwndL…

不同材质的亚克力材质如何选择?

亚克力的材质根据不同的生产流程、加工,实现不同的效果。 材质的选择是根据设备的使用场景、用户需求、设计效果和功能要求来决定的。 立创面板共提供6种的亚克力(PMMA)类型可供选择。下面,我们一同看看不同亚克力材质间的区别吧…

用SpringBoot做一个web小案例实现登录

我们在login.html页面输入用户名和密码点击登录&#xff0c;请求访问到/login&#xff0c;然后在login方法里获取User对象&#xff0c;在到UserService的login方法中判断登录&#xff0c;来依照这个逻辑&#xff0c;来完成剩下的功能&#xff1a; <div style"color:re…

基于单片机的智能电表设计(论文+源码)

1 系统整体方案设计 本课题为基于单片机的电子式单项智能电表&#xff0c;在此设计如图2.1所示的系统总体架构&#xff0c;其采用STM32单片机作为主控制器&#xff0c;搭配外设HLW8032模块实现对电压&#xff0c;电流&#xff0c;功率因数&#xff0c;电能消耗等参数进行检测&…