首页 > 其他分享 >【最新鸿蒙应用开发】——持久化的理解

【最新鸿蒙应用开发】——持久化的理解

时间:2024-06-13 15:01:36浏览次数:29  
标签:存储 持久 鸿蒙 数据库 理解 键值 UI 数据

应用数据持久化

1. 概述

应用数据持久化,是指应用将内存中的数据通过文件或数据库的形式保存到设备上。内存中的数据形态通常是任意的数据结构或数据对象,存储介质上的数据形态可能是文本、数据库、二进制文件等。

2. 分类

OpenHarmony标准系统支持典型的存储数据形态,包括用户首选项、键值型数据库、关系型数据库,另外,persistentStorage也支持数据持久化。

  • persistentStorage:全局持久化存储UI状态,通常和AppStorage配合使用,选择AppStorage存储的数据写入磁盘,以确保这些属性在应用程序重新启动时的值与应用程序关闭时的值相同;

注意:1. PersistentStorage和UI实例相关联,持久化操作需要在UI实例初始化成功后(即loadContent传入的回调被调用时)才可以被调用,早于该时机调用会导致持久化失败。

           2.初始化一次即可,AppStorage中的更改会自动同步到PersistentStorage。 若是多次进行初始化,最后一次初始化的值将会覆盖之前。

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

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

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

3. 拓展

为什么选择用户首选项/键值型/关系型数据库进行持久化存储?

preferences是一种以key-value键值型的一种轻量级数据持久化,可以快速从缓存读取,适合存储应用信息配置,用户偏好这些少量数据。

键值型数据库适合场景复杂度低,由于复杂度低,所以适合兼容跨设备跨版本的数据库存储。

关系型数据库适合存储复杂一些的关系模型数据,数据量没有限制,ArkTS应用侧的规定单条数据不要超过2M。

为什么使用Perferences/数据库,不用persistentStorage?

PersistentStorage的持久化变量最好是小于2kb的数据,不要大量的数据持久化,因为PersistentStorage写入磁盘的操作是同步的,大量的数据本地化读写会同步在UI线程中执行,影响UI渲染性能。

如果开发者需要存储大量的数据,建议使用首选项或者数据库,并且可以使用Promise异步并发的形式来进行持久化。

标签:存储,持久,鸿蒙,数据库,理解,键值,UI,数据
From: https://blog.csdn.net/m0_68038853/article/details/139622561

相关文章

  • 【最新鸿蒙应用开发】——ArkWeb2——arkts与h5交互
    H5与端侧交互1.应用侧调用前端页面函数应用侧可以通过runJavaScript()方法调用前端页面的JavaScript相关函数。在下面的示例中,点击应用侧的“runJavaScript”按钮时,来触发前端页面的htmlTest()方法。前端页面代码。<!--index.html--><!DOCTYPEhtml><html><body>......
  • 面试官:谈谈对SpringAI的理解?
    SpringAI已经发布了好长时间了,目前已经更新到1.0版本了,所以身为Java程序员的你,如果还对SpringAI一点都不了解的话,那就有点太落伍了。言归正传,那什么是SpringAI?如何快速进行SpringAI开发呢?1.什么是SpringAI?SpringAI是Spring官方社区项目,旨在简化JavaAI应......
  • 鸿蒙构建中如何获取Jenkins传递的环境变量参数
    在鸿蒙(HarmonyOS)应用开发中,我们常常需要与Jenkins这样的持续集成工具集成,以便自动化构建和部署我们的应用。一个常见的需求是在构建过程中获取Jenkins传递的环境变量参数,并将这些参数应用到我们的源代码中。本文将详细介绍如何在鸿蒙构建过程中获取并使用Jenkins的环境变量......
  • c++定义了类在main函数中使用的一个坑现象的解决,让我理解了栈,堆和内存之间关系。
    首先描述一下我的坑是啥?我的坑就是写了一个对集料颗粒进行角度计算的类,在main函数中使用采用了类定义申明,这样使用导致一个坑,这个类中对于集料的数目进行了宏定义,发现数据如果超过20个,编译就报错,当时没有太在意这个坑,没有思考什么原因。也就将就者用了。后来对接同事说,这个颗粒数......
  • Redis的两种持久化RDB和AOF
    目录一、简介二、RDB详解三、AOF详解​四、RDB与AOF对比一、简介什么是持久化?利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化。说白了Redis是基于内存的,快是快,但一关机数据就没了,这样肯定不行啊,所以就要把数据都存在磁盘上,这......
  • 【AI原理解析】— Gemma2模型
    目录一、模型概述二、模型设计结构上下文大小参数优化参数规模性能优化开放式模型跨平台兼容性三、技术细节Multi-QueryAttentionRoPEEmbeddingsGeGLUActivationsNormalizerLocation模型结构训练数据优化方法四、训练与优化训练硬件训练策略模型评估......
  • 关于加密,解密,摘要,编码的理解和应用
    故事的开始那是一个夏天,在杭州,和两位好友吃完饭聊着。他们都是刚刚入行的程序员,讨论着密码在系统中存储的方式MD5.当时的我还是个门外汉,听着他们的讨论,非常有兴趣。那时候我认为MD5是加密放方式(当然现在看来不是)。那时候我认为处理密码的方式是,用户注册后,密码通过MD5加盐方式存入......
  • 探索鸿蒙系统中的OffscreenCanvas并发线程绘制问题
    引言作为一名热衷于鸿蒙系统开发的工程师,我近期遇到了一个关于OffscreenCanvas组件在并发线程中绘制时崩溃的问题。这个问题不仅挑战了我的技术理解,也促使我深入探索鸿蒙系统的内部机制。在这篇文章中,我将分享我的发现和解决问题的过程。问题描述在开发过程中,我尝试使用O......
  • [vue2]深入理解vuex
    本节内容概述初始化仓库定义数据访问数据修改数据处理异步派生数据模块拆分案例-购物车概述vuex是一个vue的状态管理工具,状态就是数据场景某个状态在很多个组件使用(个人信息)多个组件共同维护一份数据(购物车)优势数据集中式管理数据响应式变化初始化仓库......
  • 图解Mamba——从流体力学的角度理解Mamba
    1.Transformer的问题上面是Transformer的网络结构。对于一句话的每个单词,都需要跟所有单词算注意力机制。因此注意力机制的计算复杂度为O(n......