harmoneyOS持久化存储方案

102 阅读2分钟

1. PersistentStorage:持久化存储UI状态

PersistentStorage将选定的AppStorage属性保留在设备磁盘上。应用程序通过API,以决定哪些AppStorage属性应借助PersistentStorage持久化。

UI和业务逻辑不直接访问PersistentStorage中的属性,所有属性访问都是对AppStorage的访问,AppStorage中的更改会自动同步到PersistentStorage。

实现步骤

1.在entryAbility中调用persistentStorage进行初始化

2.在需要对持久数据进行操作时,直接对appStorage操作,appSotrage中的数据会同步到persistentSotrage中

2. 用户首选项(preferences)

通常用于保存应用的配置信息。数据通过文本的形式保存在设备中,应用使用过程中会将文本中的数据全量加载到内存中,所以访问速度快、效率高,但不适合需要存储大量数据的场景。

实现步骤

1.创建首选项文件存储数据

const track = preferences.getPreferencesSync(getContext(), { name: 'track' })

2.对首选项中的数据进行增删改查操作

3.对首选项文件进行flush刷新,将修改文件中的数据

特点: 如果不使用flush刷新,首选项文件中的数据就不会改变.所以不会频繁进行同步,耗费性能较少

3. 键值型数据库(KV-Store)

一种非关系型数据库,其数据以“键值”对的形式进行组织、索引和存储,其中“键”作为唯一标识符。适合很少数据关系和业务关系的业务数据存储,同时因其在分布式场景中降低了解决数据库版本兼容问题的复杂度,和数据同步过程中冲突解决的复杂度而被广泛使用。相比于关系型数据库,更容易做到跨设备跨版本兼容。

4. 关系型数据库(RelationalStore)

一种关系型数据库,以行和列的形式存储数据,广泛用于应用中的关系型数据的处理,包括一系列的增、删、改、查等接口,开发者也可以运行自己定义的SQL语句来满足复杂业务场景的需要。

使用sqlite数据库实现,存储的db文件在应用的沙箱中.

实现步骤

  1. 创建数据库,设置数据库的名称和安全等级
await relationalStore.getRdbStore(getContext(), {
   name: this.tableName + '.db', // 数据库名称
   securityLevel: relationalStore.SecurityLevel.S1 // 安全等级
})

2.执行sql语句,创建数据库表

const sqlCreate = `CREATE TABLE IF NOT EXISTS ${this.tableName} (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    content TEXT NOT NULL,
    date_added INTEGER NOT NULL
  )`
store.executeSql(sqlCreate)

3.使用store数据库实例对象对表中的数据进行CRUD操作