数据存储方案如何选择
==========

**问题描述**

HarmonyOS标准系统支持典型的存储数据形态，包括用户首选项、键值型数据库、关系型数据库。

如果开发者需要实现应用级或多个页面的状态数据共享，就需要使用应用级别的状态管理。ArkTS根据不同特性，提供了以下几种UI状态管理能力：

LocalStorage：页面级UI状态存储

AppStorage：应用全局的UI状态存储

PersistentStorage：持久化存储UI状态

开发者选择合适的数据存储方案时，应考虑以下因素：数据类型、访问模式、性能要求、成本预算和扩展性需求。

**解决措施**

开发者应根据数据类型、访问模式等核心因素，结合各存储方案的功能特性进行选择。根据数据特性和使用场景，主要存储方案可分为以下几类：

<table id="table671819441570"><tbody><tr id="ZH-CN_TOPIC_0000002654834839__row983314220212"><td class="cellrowborder" valign="top" width="50%"><p id="ZH-CN_TOPIC_0000002654834839__p197491443715"><a href="https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-localstorage" target="_blank">LocalStorage：页面级UI状态存储</a></p><p id="ZH-CN_TOPIC_0000002654834839__p37491244972"></p></td><td class="cellrowborder" valign="top" width="50%"><p id="ZH-CN_TOPIC_0000002654834839__p19749944675">页面级UI状态存储，用于UIAbility内、页面间的状态共享。</p></td></tr><tr id="ZH-CN_TOPIC_0000002654834839__row174991020142118"><td class="cellrowborder" valign="top" width="50%"><p id="ZH-CN_TOPIC_0000002654834839__p275016441673"><a href="https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-appstorage" target="_blank">AppStorage：应用全局的UI状态存储</a></p></td><td class="cellrowborder" valign="top" width="50%"><p id="ZH-CN_TOPIC_0000002654834839__p14347959134213">单例LocalStorage对象，由UI框架在应用程序启动时创建，为应用程序UI状态属性提供中央存储。</p></td></tr><tr id="ZH-CN_TOPIC_0000002654834839__row16406131732115"><td class="cellrowborder" valign="top" width="50%"><p id="ZH-CN_TOPIC_0000002654834839__p5750124417713"><a href="https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-persiststorage" target="_blank">PersistentStorage：持久化存储UI状态</a></p></td><td class="cellrowborder" valign="top" width="50%"><p id="ZH-CN_TOPIC_0000002654834839__p16750194416718">持久化存储UI状态，和AppStorage配合使用，选择AppStorage存储的数据写入磁盘，以确保这些属性在应用程序重新启动时的值与应用程序关闭时的值相同。</p></td></tr><tr id="ZH-CN_TOPIC_0000002654834839__row6749204415718"><td class="cellrowborder" valign="top" width="50%"><p id="ZH-CN_TOPIC_0000002654834839__p10749184415715"><a href="https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-data-preferences" target="_blank">@ohos.data.preferences (用户首选项)</a></p></td><td class="cellrowborder" valign="top" width="50%"><p id="ZH-CN_TOPIC_0000002654834839__p174914447712">用于保存应用的配置信息。数据通过文本的形式保存在设备中，应用使用过程中会将文本中的数据全量加载到内存中，所以访问速度快、效率高，但不适合需要存储大量数据的场景。</p></td></tr><tr id="ZH-CN_TOPIC_0000002654834839__row074994414714"><td class="cellrowborder" valign="top" width="50%"><p id="ZH-CN_TOPIC_0000002654834839__p1374920441173"><a href="https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-distributedkvstore" target="_blank">@ohos.data.distributedKVStore (分布式键值数据库)</a></p></td><td class="cellrowborder" valign="top" width="50%"><p id="ZH-CN_TOPIC_0000002654834839__p16328133424320">一种非关系型数据库，其数据以“键值”对的形式进行组织、索引和存储，其中“键”作为唯一标识符。适合数据关系和业务关系较少的业务数据存储，同时因其在分布式场景中降低了解决数据库版本兼容问题的复杂度，和数据同步过程中冲突解决的复杂度而被使用。相比于关系型数据库，更容易做到跨设备跨版本兼容。</p></td></tr><tr id="ZH-CN_TOPIC_0000002654834839__row157491442074"><td class="cellrowborder" valign="top" width="50%"><p id="ZH-CN_TOPIC_0000002654834839__p18749154417711"><a href="https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-data-relationalstore" target="_blank">@ohos.data.relationalStore (关系型数据库)</a></p></td><td class="cellrowborder" valign="top" width="50%"><p id="ZH-CN_TOPIC_0000002654834839__p474934419716">一种关系型数据库，以行和列的形式存储数据，广泛用于应用中的关系型数据的处理，包括一系列的增、删、改、查等接口，开发者也可以运行自己定义的SQL语句来满足复杂业务场景的需要。</p></td></tr></tbody></table>