前言

在鸿蒙开发中,想要实现数据的持久化存储主要有四种方式,分别是:用户首选项(Preferences)键值型数据库(KV-Store)关系型数据库(RelationalStore)PersistenceV2。由于V1版本的状态管理已经不在推荐使用所以这里就不在列举了。在此前的开发中我仅用过状态管理V2版本中所提供的持久化存储UI状态的PersistentceV2的功能,在暂时没有尝试过其他的数据持久化方式,所以本文会对另外三种数据持久化的方式做出着重解析。

少量数据持久化存储

对于这四种数据持久化存储的方式,我们可以依据需要存储的数据量来进行划分,当需要存储的数据量很少时,可以使用用户首选项(Preferences)PersistenceV2,当需要存储的数据量较多时,可以使用关系型数据库(RelationalStore)键值型数据库(KV-Store)

这个划分并非绝对,但依据官方给出的建议,当需要存储的数据量超过50MB时,用户首选项会对象的创建以及持久化对象的创建会成为耗时操作可能造成线程阻塞,应用卡顿,所以此时我们就应当考虑使用数据库来进行数据持久化。

用户首选项(Preferences)与PersistenceV2的区别

特性 PersistentStorage Preferences
存储方式 持久化数据到设备磁盘,应用重启后数据保留 提供键值对存储,数据缓存在内存中
数据大小限制 推荐存储小于2KB的数据 键为字符串(非空且≤1024字节),值(字符串≤16MB)
性能 同步写入磁盘,大量数据可能影响UI性能 内存缓存,读写速度快
使用场景 应用状态恢复、关键配置信息 用户偏好设置、轻量级配置数据

总结来讲,这两者最关键的区别就在于是否直接存储至磁盘,PersistentceV2是在执行增删改查时直接在磁盘上进行操作的,大量的数据在同时进行本地化操作时会严重影响应用性能,并且这些进程是直接在UI线程中执行的,会大幅降低UI渲染效率。