diff --git a/zh-cn/device-dev/Readme-CN.md b/zh-cn/device-dev/Readme-CN.md
index d85370b5314c3d80254582f529f124f240307404..0ee0a90d465c6b126a4baeca742ce2cec4cd1882 100644
--- a/zh-cn/device-dev/Readme-CN.md
+++ b/zh-cn/device-dev/Readme-CN.md
@@ -38,8 +38,7 @@
- [图形图像](subsystems/subsys-graphics-overview.md)
- [媒体](subsystems/subsys-multimedia-camera-overview.md)
- [公共基础](subsystems/subsys-utils-guide.md)
- - [AI框架](subsystems/subsys-ai-aiframework-devguide.md)
- - [数据管理](subsystems/subsys-data-relational-database-overview.md)
+ - [AI框架](subsystems/subsys-ai-aiframework-devguide.md)
- [Sensor服务](subsystems/subsys-sensor-overview.md)
- [用户程序框架](subsystems/subsys-application-framework-overview.md)
- [OTA升级](subsystems/subsys-ota-guide.md)
diff --git a/zh-cn/device-dev/subsystems/Readme-CN.md b/zh-cn/device-dev/subsystems/Readme-CN.md
index 8db80acc71b81397c3178ca20d343836bdb8ec35..ada771ceab4cca745ffee93a9455450bb83d278b 100644
--- a/zh-cn/device-dev/subsystems/Readme-CN.md
+++ b/zh-cn/device-dev/subsystems/Readme-CN.md
@@ -39,13 +39,6 @@
- [音视频录制开发指导](subsys-multimedia-video-record-guide.md)
- [公共基础库开发指导](subsys-utils-guide.md)
- [AI框架开发指导](subsys-ai-aiframework-devguide.md)
-- 数据管理
- - 关系型数据库
- - [关系型数据库概述](subsys-data-relational-database-overview.md)
- - [关系型数据库开发指导](subsys-data-relational-database-guide.md)
- - 轻量级数据存储
- - [轻量级数据存储概述](subsys-data-storage-overview.md)
- - [轻量级数据存储开发指导](subsys-data-storage-guide.md)
- Sensor服务
- [Sensor服务概述](subsys-sensor-overview.md)
- [Sensor服务使用指导](subsys-sensor-guide.md)
diff --git a/zh-cn/device-dev/subsystems/subsys-data-relational-database-guide.md b/zh-cn/device-dev/subsystems/subsys-data-relational-database-guide.md
deleted file mode 100644
index 888c1d09552d9b77beaaf73dd3912f892e42b2df..0000000000000000000000000000000000000000
--- a/zh-cn/device-dev/subsystems/subsys-data-relational-database-guide.md
+++ /dev/null
@@ -1,346 +0,0 @@
-# 关系型数据库开发指导
-
-## 场景介绍
-
-关系型数据库是在SQLite基础上实现的本地数据操作机制,提供给用户无需编写原生SQL语句就能进行数据增删改查的方法,同时也支持原生SQL语句操作。
-
-## 接口说明
-### 数据库的创建和删除
-
-关系型数据库提供了数据库创建方式,以及对应的删除接口,涉及的API如下所示。
-
-表1 数据库创建和删除API
-
-| 类名 | 接口名 | 描述 |
-| ---- | ---- | ---- |
-| RdbStoreConfig | RdbStoreConfig(const std::string &path,
StorageMode storageMode = StorageMode::MODE_DISK,
bool readOnly = false,
const std::vector &encryptKey = std::vector(),
const std::string &journalMode = "",
const std::string &syncMode = "",
const std::string &databaseFileType = "",
const std::string &databaseFileSecurityLevel = "") | 对数据库进行配置,包括设置数据库名、存储模式、日志模式、同步模式,是否为只读,及数据库加密。 - path:数据库路径;
- readOnly:是否只读;
- storageMode:存储模式;
- encryptKey:加密密钥;
- journalMode:日志模式;
- syncMode:同步模式;
- databaseFileType:数据库类型;
- databaseFileSecurityLevel:安全等级
|
-| RdbOpenCallback | int OnCreate(RdbStore &rdbStore) | 数据库创建时被回调,开发者可以在该方法中初始化表结构,并添加一些应用使用到的初始化数据。 |
-| RdbOpenCallback | int OnUpgrade(RdbStore &rdbStore, int currentVersion, int targetVersion) | 数据库升级时被回调。 |
-| RdbOpenCallback | int OnDowngrade(RdbStore &rdbStore, int currentVersion, int targetVersion) | 数据库降级时被回调。 |
-| RdbHelper | std::shared_ptr\ GetRdbStore(const RdbStoreConfig &config, int version, RdbOpenCallback &openCallback, int &errCode) | 根据配置创建或打开数据库。 |
-| RdbHelper | int DeleteRdbStore(const std::string &path) | 删除指定的数据库。 |
-
-### 数据库谓词的使用
-
-关系型数据库提供了用于设置数据库操作条件的谓词AbsRdbPredicates,其中包括两个实现子类RdbPredicates和RawRdbPredicates:
-
-- RdbPredicates:开发者无需编写复杂的SQL语句,仅通过调用该类中条件相关的方法,如equalTo、notEqualTo、groupBy、orderByAsc、beginsWith等,就可自动完成SQL语句拼接,方便用户聚焦业务操作。
-- RawRdbPredicates:可满足复杂SQL语句的场景,支持开发者自己设置where条件子句和whereArgs参数。不支持equalTo等条件接口的使用。
-
- 表2 数据库谓词API
- | 类名 | 接口名 | 描述 |
- | ---- | ---- | ---- |
- | RdbPredicates | AbsPredicates *EqualTo(std::string field, std::string value) | 设置谓词条件,满足field字段与value值相等。 |
- | RdbPredicates | AbsPredicates *NotEqualTo(std::string field, std::string value) | 设置谓词条件,满足field字段与value值不相等。 |
- | RdbPredicates | AbsPredicates *BeginsWith(std::string field, std::string value) | 设置谓词条件,满足field字段以value值开头。 |
- | RdbPredicates | AbsPredicates *Between(std::string field, std::string low, std::string high) | 设置谓词条件,满足field字段在最小值low和最大值high之间。 |
- | RdbPredicates | AbsPredicates *OrderByAsc(std::string field) | 设置谓词条件,根据field字段升序排列。 |
- | RdbPredicates | void SetWhereClause(std::string whereClause) | 设置where条件子句。 |
- | RdbPredicates | void SetWhereArgs(std::vector\ whereArgs) | 设置whereArgs参数,该值表示where子句中占位符的值。 |
- | RdbPredicates | AbsRdbPredicates *InDevices(std::vector& devices) | 设置谓词条件,同步分布式数据库时指定组网内的远程设备。 |
- | RdbPredicates | AbsRdbPredicates *InAllDevices() | 设置谓词条件,同步分布式数据库时连接到组网内的所有远程设备。|
-
-
-### 数据表的增删改查
-
-关系型数据库提供对本地数据增删改查操作的能力,相关API如下所示。
-
-- 新增
-
- 关系型数据库提供了插入数据的接口,通过ValuesBucket输入要存储的数据,通过返回值判断是否插入成功,插入成功时返回最新插入数据所在的行号,失败时则返回-1。
-
- 表3 数据表插入API
-
- | 类名 | 接口名 | 描述 |
- | ---- | ---- | ---- |
- | RdbStore | int Insert(int64_t &outRowId, const std::string &table, const ValuesBucket &initialValues) | 向数据库插入数据。- table:待添加数据的表名。
- initialValues:以ValuesBucket存储的待插入的数据。它提供一系列put方法,如PutString(const std::string &columnName, const std::string &value),PutDouble(const std::string &columnName, double value),用于向ValuesBucket中添加数据。
|
-
-- 删除
-
- 调用删除接口,通过AbsRdbPredicates指定删除条件。该接口的返回值表示删除的数据行数,可根据此值判断是否删除成功。如果删除失败,则返回0。
-
- 表4 数据表删除API
- | 类名 | 接口名 | 描述 |
- | ---- | ---- | ---- |
- | RdbStore | int Delete(int &deletedRows, const AbsRdbPredicates &predicates) | 删除数据。- deletedRows:删除的记录条数。
- predicates:Rdb谓词,指定了删除操作的表名和条件。AbsRdbPredicates的实现类有两个:RdbPredicates和RawRdbPredicates。
- RdbPredicates:支持调用谓词提供的equalTo等接口,设置删除条件。
- RawRdbPredicates:仅支持设置表名、where条件子句、whereArgs三个参数,不支持equalTo等接口调用。
|
-
-- 更新
-
- 调用更新接口,传入要更新的数据,并通过AbsRdbPredicates指定更新条件。该接口的返回值表示更新操作影响的行数。如果更新失败,则返回0。
-
- 表5 数据表更新API
- | 类名 | 接口名 | 描述 |
- | ---- | ---- | ---- |
- | RdbStore | int Update(int &changedRows, const ValuesBucket &values, const AbsRdbPredicates &predicates) | 更新数据库表中符合谓词指定条件的数据。- changedRows:更新的记录条数。
- values:以ValuesBucket存储的要更新的数据。
- predicates:指定了更新操作的表名和条件。AbsRdbPredicates的实现类有两个:RdbPredicates和RawRdbPredicates。
- RdbPredicates:支持调用谓词提供的equalTo等接口,设置更新条件。
- RawRdbPredicates:仅支持设置表名、where条件子句、whereArgs三个参数,不支持equalTo等接口调用。
|
-
-- 查询
-
- 关系型数据库提供了两种查询数据的方式:
-
- - 直接调用查询接口。使用该接口,会将包含查询条件的谓词自动拼接成完整的SQL语句进行查询操作,无需用户传入原生的SQL语句。
- - 执行原生的SQL语句进行查询操作。
-
- 表6 数据表查询API
- | 类名 | 接口名 | 描述 |
- | ---- | ---- | ---- |
- | RdbStore | std::unique_ptr Query(const AbsRdbPredicates &predicates, const std::vector\ columns) | 查询数据。- predicates:谓词,可以设置查询条件。AbsRdbPredicates的实现类有两个:RdbPredicates和RawRdbPredicates。
- RdbPredicates:支持调用谓词提供的equalTo等接口,设置查询条件。
- RawRdbPredicates:仅支持设置表名、where条件子句、whereArgs三个参数,不支持equalTo等接口调用。
- columns:规定查询返回的列。
|
- | RdbStore | std::unique_ptr QuerySql(const std::string &sql, const std::vector\ &selectionArgs = std::vector\()) | 执行原生的用于查询操作的SQL语句。- sql:原生用于查询的sql语句。
- selectionArgs:sql语句中占位符参数的值,若select语句中没有使用占位符,该参数可以设置为null。
|
-
-### 查询结果集的使用
-
-关系型数据库提供了查询返回的结果集ResultSet,其指向查询结果中的一行数据,供用户对查询结果进行遍历和访问。ResultSet对外API如下所示。
-
-表7 结果集API
-| 类名 | 接口名 | 描述 |
-| ---- | ---- | ---- |
-| ResultSet | int GoTo(int offset) | 从结果集当前位置移动指定偏移量。 |
-| ResultSet | int GoToRow(int position) | 将结果集移动到指定位置。 |
-| ResultSet | int GoToNextRow() | 将结果集向后移动一行。 |
-| ResultSet | int GoToPreviousRow() | 将结果集向前移动一行。 |
-| ResultSet | int IsStarted(bool &result) | 判断结果集是否被移动过。 |
-| ResultSet | int IsEnded(bool &result) | 判断结果集是否被移动到最后一行之后。 |
-| ResultSet | int IsAtFirstRow(bool &result) | 判断结果集当前位置是否在第一行。 |
-| ResultSet | int IsAtLastRow(bool &result) | 判断结果集当前位置是否在最后一行。 |
-| ResultSet | int GetRowCount(int &count) | 获取当前结果集中的记录条数。 |
-| ResultSet | int GetColumnCount(int &count) | 获取结果集中的列数。 |
-| ResultSet | int GetString(int columnIndex, std::string &value) | 获取当前行指定列的值,以String类型返回。 |
-| ResultSet | int GetBlob(int columnIndex, std::vector\ &blob) | 获取当前行指定列的值,以字节数组形式返回。 |
-| ResultSet | int GetDouble(int columnIndex, double &value) | 获取当前行指定列的值,以double型返回。 |
-
-### 设置分布式列表
-
-用户可以对当前数据库中的列表设置为分布式列表。
-
-表8 设置分布式列表
-| 类名 | 接口名 | 描述 |
-| ---- | ---- | ---- |
-| RdbStore | bool SetDistributedTables(const std::vector& tables) | 设置分布式列表。
-
-### 根据本地表名获取指定远程设备的分布式表名
-
-用户根据本地表名获取指定远程设备的分布式表名。在查询远程设备数据库时,需要使用分布式表名。
-
-表9 根据本地表名获取指定远程设备的分布式表名
-| 类名 | 接口名 | 描述 |
-| ---- | ---- | ---- |
-| RdbStore | std::string ObtainDistributedTableName(const std::string& device, const std::string& table) | 根据本地表名获取指定远程设备的分布式表名。在查询远程设备数据库时,需要使用分布式表名。
-
-### 在设备之间同步数据
-
-表10 在设备之间同步数据
-| 类名 | 接口名 | 描述 |
-| ---- | ---- | ---- |
-| RdbStore | bool Sync(const SyncOption& option, const AbsRdbPredicates& predicate, const SyncCallback& callback) | 在设备之间同步数据。- option:同步选项;mode:同步模式(PUSH表示数据从本地设备推送到远程设备/PULL表示数据从远程设备拉至本地设备);isBlock:是否阻塞
- callback:指定的callback回调函数
-
-### 注册数据库的观察者
-
-表11 注册数据库的观察者
-| 类名 | 接口名 | 描述 |
-| ---- | ---- | ---- |
-| RdbStore | bool Subscribe(const SubscribeOption& option, RdbStoreObserver *observer) | 注册数据库的观察者。当分布式数据库中的数据发生更改时,将调用回调。- option:订阅类型;
- observer:指分布式数据库中数据更改事件的观察者
-
-### 从数据库中删除指定类型的指定观察者
-
-表12 从数据库中删除指定类型的指定观察者
-| 类名 | 接口名 | 描述 |
-| ---- | ---- | ---- |
-| RdbStore | bool UnSubscribe(const SubscribeOption& option, RdbStoreObserver *observer) | 从数据库中删除指定类型的指定观察者。- option:订阅类型;
- observer:指已注册的数据更改观察者
-
-### 数据库的备份和恢复
-
-关系型数据库提供对本地数据库文件的备份和恢复能力,相关API如下所示。
-
-- 备份
-
- 关系型数据库提供了备份数据库文件的接口,通过databasePath指定的备份文件名(支持路径)备份当前数据库文件。通过返回值判断是否备份成功,成功时返回0,失败时则返回相应的错误码。
-
- 表13 数据库备份API
-
- | 类名 | 接口名 | 描述 |
- | ---- | ---- | ---- |
- | RdbStore | int Backup(const std::string databasePath, const std::vector<uint8_t> destEncryptKey) | 备份数据库文件。- databasePath:指定的备份文件名。
- destEncryptKey:数据库的加密密钥。注意:当前只支持非加密数据库的备份。
|
-
-- 恢复
-
- 关系型数据库提供了恢复数据库文件的接口,通过backupPath指定的备份文件名(支持路径)恢复当前数据库文件。通过返回值判断是否恢复成功,成功时返回0,失败时则返回相应的错误码。
-
- 表14 数据库恢复API
-
- | 类名 | 接口名 | 描述 |
- | ---- | ---- | ---- |
- | RdbStore | int Restore(const std::string backupPath, const std::vector<uint8_t> &newKey) | 恢复数据库文件。- backupPath:指定的备份文件名。
- newKey:数据库的加密密钥。注意:当前只支持非加密数据库的恢复。
|
-
-### 事务
-
- 事务(Transaction)是一个对数据库执行工作单元。通过返回值判断事务是否成功,成功时返回0,失败时则返回相应的错误码。
-
- 表15 事务API
-
- | 类名 | 接口名 | 描述 |
- | ---- | ---- | ---- |
- | RdbStore | int BeginTransaction() | 开启一个事务。 |
- | RdbStore | int Commit() | 保存更改。 |
- | RdbStore | int RollBack() | 回滚所做的更改。 |
-
-## 约束与限制
-
-无。
-
-## 开发步骤
-
-1. 创建数据库。
-
- a. 配置数据库相关信息,包括数据库的名称、存储模式、是否为只读模式等。
-
- b. 初始化数据库表结构和相关数据。
-
- c. 创建数据库。
-
- 示例代码如下:
- ```c++
- const std::string DATABASE_NAME = RDB_TEST_PATH + "RdbStoreTest.db";
- const std::string CREATE_TABLE_TEST = "CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, salary REAL, blobType BLOB)";
-
- class OpenCallback : public RdbOpenCallback {
- public:
- int OnCreate(RdbStore &rdbStore) override;
- int OnUpgrade(RdbStore &rdbStore, int oldVersion, int newVersion) override;
- };
-
- int OpenCallback::OnCreate(RdbStore &store)
- {
- return store.ExecuteSql(CREATE_TABLE_TEST);
- }
-
- RdbStoreConfig config(DATABASE_NAME);
- OpenCallback callback;
-
- std::shared_ptr store = RdbHelper::GetRdbStore(config, 1, callback, 0);
- ```
-
-2. 插入数据。
-
- a. 构造要插入的数据,以ValuesBucket形式存储。
-
- b. 调用关系型数据库提供的插入接口。
-
- c. 创建数据库。
-
- 示例代码如下:
- ```c++
- ValuesBucket values;
-
- values.PutInt("id", 1);
- values.PutString("name", std::string("Tom"));
- values.PutInt("age", 18);
- values.PutDouble("salary", 100.5);
- values.PutBlob("blobType", std::vector{ 1, 2, 3 });
- store->Insert(id, "test", values);
- ```
-
-3. 查询数据。
-
- a. 构造用于查询的谓词对象,设置查询条件。
-
- b. 指定查询返回的数据列。
-
- c. 调用查询接口查询数据。
-
- d. 调用结果集接口,遍历返回结果。
-
- 示例代码如下:
- ```c++
- std::vector columns = {"id", "name", "age", "salary"};
-
- RdbPredicates predicates("test");
- predicates.EqualTo("age", "25")->OrderByAsc("salary");
- std::unique_ptr resultSet = store->Query(predicates, columns)
- resultSet.goToNextRow();
- ```
-
-4. 设置分布式同步表
-
- a. 调用接口设置分布式同步表。
-
- 示例代码如下:
-
- ```c++
- store->SetDistributedTables("test");
- ```
-
-5. 分布式数据同步
-
- a. 定义同步模式和阻塞状态。
-
- b. 构造用于同步分布式表的谓词对象,指定组网内的远程设备。
-
- c. 调用接口同步数据。
-
- 示例代码如下:
-
- ```c++
- SyncOption option;
- option.mode = PUSH;
- option.isBlock = true;
- AbsRdbPredicates predicate("test");
- predicate.InAllDevices();
- store->Sync(option, predicate, [](const SyncResult& result) {
- for (const auto& [device, status] : result) {
- LogI("device=%s status=%d", device.c_str(), status);
- }
- });
- ```
-
-6. 分布式数据订阅
-
- a. 重写数据更改观察者OnChange()函数。
-
- b. 定义分布式数据订阅类型。
-
- c. 调用接口实现分布式数据订阅,或取消订阅。
-
- 示例代码如下:
-
- ```c++
- class MyObserver : public RdbStoreObserver {
- public:
- void OnChange(const std::vector& devices) override {
- for (const auto& device : devices) {
- LOGI("device=%s data change", device.c_str());
- }
- }
- };
-
- SubscribeOption option;
- option.mode = SubscribeMode::REMOTE;
- MyObserver observer;
- store->Subscribe(option, &observer); // 分布式数据订阅
-
- store->UnSubscribe(option, &observer); // 取消订阅
- ```
-
-7. 跨设备查询
-
- a. 根据本地表名获取指定远程设备的分布式表名。
-
- b. 根据指定SQL语句查询数据库中的数据。
-
- 示例代码如下:
- ```c++
- std::string tableName = store->ObtainDistributedTableName("123456789abcd", "test");
- auto resultSet = store->QuerySql("SELECT * from ?;", tableName);
- ```
-
-8. 数据库的备份和恢复
-
- a. 根据指定的数据库备份文件名备份当前数据库。
-
- b. 根据指定的数据库备份文件恢复当前数据库。
-
- 示例代码如下:
- ```c++
- std::string backupName = "backup.db"; // 指定数据库的备份文件名
- std::vector key; // 数据库的加密密钥
- int errno = store->Backup(backupName, key);
- errno = store->Restore(backupName, key);
- ```
\ No newline at end of file
diff --git a/zh-cn/device-dev/subsystems/subsys-data-relational-database-overview.md b/zh-cn/device-dev/subsystems/subsys-data-relational-database-overview.md
deleted file mode 100644
index 90ef4efc82a04fd03a0083f9ecc92c54f3fec8f6..0000000000000000000000000000000000000000
--- a/zh-cn/device-dev/subsystems/subsys-data-relational-database-overview.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# 关系型数据库概述
-
-关系型数据库(Relational Database,RDB)是一种基于关系模型来管理数据的数据库。OpenHarmony关系型数据库基于SQLite组件提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查等接口,也可以直接运行用户输入的SQL语句来满足复杂的场景需要。
-
-## 基本概念
-
-- 关系型数据库
-
- 基于关系模型来管理数据的数据库,以行和列的形式存储数据。
-
-- 谓词
-
- 数据库中用来代表数据实体的性质、特征或者数据实体之间关系的词项,主要用来定义数据库的操作条件。
-
-- 结果集
-
- 指用户查询之后的结果集合,可以对数据进行访问。结果集提供了灵活的数据访问方式,可以更方便的拿到用户想要的数据。
-
-- SQLite数据库
-
- 一款遵守ACID的轻型开源关系型数据库管理系统。
-
-## 运作机制
-OpenHarmony关系型数据库对外提供通用的操作接口(即Rdb Store接口),底层使用第三方开源组件SQLite作为持久化存储引擎,支持SQLite具有的所有数据库特性。
-
-**图1** 关系型数据库运作机制
-
-![](figures/zh-cn_image_0000001115980740.png)
-
-## 默认配置
-- 如果不指定数据库的日志模式,那么系统默认日志方式是WAL(Write Ahead Log)模式。
-- 如果不指定数据库的落盘模式,那么系统默认落盘方式是FULL模式。
-- OpenHarmony数据库使用的共享内存默认大小是8MB,单次查询使用的共享内存默认大小是2MB。
-
-## 约束与限制
-- 数据库中连接池的最大数量是4个,用以管理用户的读操作。
-- 为保证数据的准确性,数据库同一时间只能支持一个写操作。
-
-
diff --git a/zh-cn/device-dev/subsystems/subsys-data-storage-guide.md b/zh-cn/device-dev/subsystems/subsys-data-storage-guide.md
deleted file mode 100755
index edadbed8f145320327af3d3f1cdb158df1428ae4..0000000000000000000000000000000000000000
--- a/zh-cn/device-dev/subsystems/subsys-data-storage-guide.md
+++ /dev/null
@@ -1,193 +0,0 @@
-# 轻量级数据存储开发指导
-
-## 场景介绍
-
-轻量级数据存储功能通常用于保存应用的一些常用配置信息,并不适合需要存储大量数据和频繁改变数据的场景。应用的数据保存在文件中,这些文件可以持久化地存储在设备上。需要注意的是,应用访问的实例包含文件所有数据,这些数据会一直加载在设备的内存中,直到应用主动从内存中将其移除前,应用可以通过Preferences的API进行数据操作。
-
-## 接口说明
-
-轻量级存储为应用提供key-value键值型的文件数据处理能力,支持应用对数据进行轻量级存储及查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括字符串型、布尔型、整数型、长整型、浮点型、双精度类型和字符串数组。
-
-**创建存储实例**
-
-读取指定文件,将数据加载到Preferences实例,即可创建一个存储实例,用于数据操作。
-
-**表 1** 轻量级数据存储实例创建接口
-
-| 类名 | 方法名 | 描述 |
-| --- | ----- | ----|
-| PreferencesHelper | static std::shared_ptr GetPreferences(const std::string &path, int &errCode); | path:应用程序内部数据存储路径。
errCode:错误码。
返回值:轻量级存储实例。 |
-
-**存入数据**
-
-通过Put系列方法,可以增加或修改Preferences实例中的数据。
-
-**表 2** 轻量级偏好数据库存入接口
-
-| 类名 | 方法名 | 描述 |
-| --- | ----- | ----|
-| Preferences | int PutInt(const std::string &key, int value); | key:将要存储的key名称,不能为空。
value:将要存储的value。
返回值:错误码。 |
-| Preferences | int PutString(const std::string &key, const std::string &value); | key:将要存储的key名称,不能为空。
value:将要存储的value。
返回值:错误码。 |
-| Preferences | int PutBool(const std::string &key, bool value); | key:将要存储的key名称,不能为空。
value:将要存储的value。
返回值:错误码。 |
-| Preferences | int PutLong(const std::string &key, int64_t value); | key:将要存储的key名称,不能为空。
value:将要存储的value。
返回值:错误码。 |
-| Preferences | int PutFloat(const std::string &key, float value); | key:将要存储的key名称,不能为空。
value:将要存储的value。
返回值:错误码。 |
-| Preferences | int PutDouble(const std::string &key, double value); | key:将要存储的key名称,不能为空。
value:将要存储的value。
返回值:错误码。 |
-| Preferences | int PutStringSet(const std::string &key, const std::set\ &value); | key:将要存储的key名称,不能为空。
value:将要存储的。
返回值:错误码。 |
-
-**读取数据**
-
-通过调用Get系列方法,可以读取Preferences中的数据。
-
-**表 3** 轻量级数据读取接口
-
-| 类名 | 方法名 | 描述 |
-| --- | ----- | ----|
-| Preferences | int GetInt(const std::string &key, const int defValue = 0); | key:要获取的存储key名称,不能为空。
defValue:若获取失败或value不存在返回此默认值。
返回值:value。 |
-| Preferences | std::string GetString(const std::string &key, const std::string &defValue = {}); | key:要获取的存储key名称,不能为空。
defValue:若获取失败或value不存在返回此默认值。
返回值:value。 |
-| Preferences | bool GetBool(const std::string &key, const bool defValue = false); | key:要获取的存储key名称,不能为空。
defValue:若获取失败或value不存在返回此默认值。
返回值:value。 |
-| Preferences | float GetFloat(const std::string &key, const float defValue = 0); | key:要获取的存储key名称,不能为空。
defValue:若获取失败或value不存在返回此默认值。
返回值:value。 |
-| Preferences | double GetDouble(const std::string &key, const double defValue = 0); | key:要获取的存储key名称,不能为空。
defValue:若获取失败或value不存在返回此默认值。
返回值:value。 |
-| Preferences | int64_t GetLong(const std::string &key, const int64_t defValue = 0); | key:要获取的存储key名称,不能为空。
defValue:若获取失败或value不存在返回此默认值。
返回值:value。 |
-| Preferences | std::set\ GetStringSet(const std::string &key, const std::set\ &defValue = {}); | key:要获取的存储key名称,不能为空。
defValue:若获取失败或value不存在返回此默认值。
返回值:value。 |
-
-**数据持久化**
-
-通过执行Flush()或者FlushSync()方法,应用可以将缓存的数据再次写回文本文件中进行持久化存储。
-
-**表 5** 轻量级数据数据持久化接口
-
-| 类名 | 方法名 | 描述 |
-| --- | ----- | ----|
-| Preferences | void Flush(); | 将Preferences实例通过异步线程回写入文件中。 |
-| Preferences | int FlushSync(); | 将Preferences实例通过同步线程回写入文件中,并返回错误码。 |
-
-**订阅数据变化**
-
-订阅数据变化需要指定PreferencesObserver作为回调方法。订阅的key的值发生变更后,当执行flush方法时,PreferencesObserver被回调。
-
-**表 5** 轻量级数据变化订阅接口
-
-| 类名 | 方法名 | 描述 |
-| --- | ----- | ----|
-| Preferences | void RegisterObserver(std::shared_ptr preferencesObserver); | preferencesObserver:需要订阅的回调对象实例。 |
-| Preferences | void UnRegisterObserver(std::shared_ptr preferencesObserver); | preferencesObserver:需要注销订阅的回调对象实例。 |
-
-**删除数据文件**
-
-通过调用以下两种接口,可以删除数据实例或对应的文件。
-
-**表 6** 轻量级数据存储删除接口
-
-| 类名 | 方法名 | 描述 |
-| --- | ----- | ----|
-| PreferencesHelper | int DeletePreferences(const std::string &path); | 将Preferences实例从内存中移除,同时删除其在设备上的持久化文件。path:应用程序内部数据存储路径。
返回值:错误码。 |
-| PreferencesHelper | int RemovePreferencesFromCache(const std::string &path); | 仅将Preferences实例从内存中移除。path:应用程序内部数据存储路径。
返回值:错误码。 |
-
-## 开发步骤
-
-1. 准备工作,引入preferences以及相关的头文件到开发环境。
-
- ``` C++
- 头文件路径://distributeddatamgr_appdatamgr/interfaces/innerkits/native_preferences/include
- ```
-
-2. 获取Preferences实例。
-
- 读取指定文件,将数据加载到Preferences实例,用于数据操作。
-
- ``` C++
- int errCode = E_OK;
- Preferences pref = PreferencesHelper::GetPreferences(PREF_TEST_PATH + "test.xml", errCode); // PREF_TEST_PATH须为应用沙箱路径。
- EXPECT_EQ(errCode, E_OK);
- ```
-
-
-3. 存入数据。
-
- 使用Preferences put方法保存数据到缓存的实例中。
-
- ```C++
- pref->PutString("test", "remove");
- ```
-
-4. 读取数据。
-
- 使用Preferences get方法读取数据。
-
- ``` C++
- std::string ret = pref->GetString("test", "defaultValue");
- EXPECT_EQ(ret, "remove");
- ```
-
-
-5. 数据持久化。
-
- 应用存入数据到Preferences实例后,可以通过Flush()或者FlushSync()方法将Preferences实例回写到文件中。
-
- ```C++
- int err = pref->FlushSync();
- EXPECT_EQ(ret, E_OK);
- ```
-
-6. 订阅数据变化。
-
- 应用订阅数据变化需要指定PreferencesObserver作为回调方法。订阅的key的值发生变更后,当执行flush或者flushSync方法时,PreferencesObserver被触发回调。不再需要PreferencesObserver时请注销。
-
- 自定义类,实现PreferencesObserver接口:
- ``` C++
- class PreferencesObserverCounter : public PreferencesObserver {
- public:
- virtual ~PreferencesObserverCounter();
- void OnChange(Preferences &preferences, const std::string &key) override;
-
- std::atomic_int notifyTimes;
- static const std::vector NOTIFY_KEYS_VECTOR;
- };
-
- PreferencesObserverCounter::~PreferencesObserverCounter() {}
-
- void PreferencesObserverCounter::OnChange(Preferences &preferences, const std::string &key)
- {
- for (auto it = NOTIFY_KEYS_VECTOR.cbegin(); it != NOTIFY_KEYS_VECTOR.cend(); it++) {
- if (key.compare(*it)) {
- notifyTimes++;
- break;
- }
- }
- }
-
- const std::vector PreferencesObserverCounter::NOTIFY_KEYS_VECTOR = { PreferencesTest::KEY_TEST_INT_ELEMENT,
- PreferencesTest::KEY_TEST_LONG_ELEMENT, PreferencesTest::KEY_TEST_FLOAT_ELEMENT,
- PreferencesTest::KEY_TEST_BOOL_ELEMENT, PreferencesTest::KEY_TEST_STRING_ELEMENT };
- ```
-
- 订阅数据变化,并触发执行回调方法:
- ``` C++
- std::shared_ptr counter =
- std::make_shared();
- pref->RegisterObserver(counter); // 注册数据变化的回调。
-
- pref->PutString(PreferencesTest::KEY_TEST_STRING_ELEMENT, "test");
- pref->Flush(); // 触发执行counter的onChanged回调方法。
- EXPECT_EQ(static_cast(counter.get())->notifyTimes, 1);
-
- /* same value */
- pref->PutInt(PreferencesTest::KEY_TEST_INT_ELEMENT, 2);
- pref->PutString(PreferencesTest::KEY_TEST_STRING_ELEMENT, "test");
- pref->Flush();
- EXPECT_EQ(static_cast(counter.get())->notifyTimes, 2);
-
- pref->UnRegisterObserver(counter); // 注销注册数据变化的回调。
- ```
-
-
-7. 删除指定文件。
-
- 从使用PreferencesHelper内存中移除指定文件对应的Preferences单实例,并删除指定文件及其备份文件、损坏文件。删除指定文件时,应用不允许再使用该实例进行数据操作,否则会出现数据一致性问题。删除后,数据及文件将不可恢复。
-
- ``` C++
- pref = nullptr;
- int ret = PreferencesHelper::DeletePreferences("/data/test/test");
- EXPECT_EQ(ret, E_OK);
- ```
-
diff --git a/zh-cn/device-dev/subsystems/subsys-data-storage-overview.md b/zh-cn/device-dev/subsystems/subsys-data-storage-overview.md
deleted file mode 100755
index 67dfa96b86233202ae94f46c0492377fcd87ccb3..0000000000000000000000000000000000000000
--- a/zh-cn/device-dev/subsystems/subsys-data-storage-overview.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# 轻量级数据存储概述
-
-轻量级数据存储适用于对Key-Value结构的数据进行存取和持久化操作。应用获取某个轻量级存储对象后,该存储对象中的数据将会被缓存在内存中,以便应用获得更快的数据存取速度。应用也可以将缓存的数据再次写回文本文件中进行持久化存储,由于文件读写将产生不可避免的系统资源开销,建议应用减少对持久化文件的读写频率。
-
-## 基本概念
-
-- **Key-Value数据结构**
-
- 一种键值结构数据类型。Key是不重复的关键字,Value是数据值。
-
-- **非关系型数据库**
-
- 区别于关系数据库,不保证遵循ACID(Atomic、Consistency、Isolation及Durability)特性,不采用关系模型来组织数据,数据之间无关系。
-
-
-## 运作机制
-
-1. 应用通过指定Preferences文件将其中的数据加载到Preferences实例,系统会通过静态容器将该实例存储在内存中,同一应用或进程中每个文件仅存在一个Preferences实例,直到应用主动从内存中移除该实例或者删除该Preferences文件。
-2. 应用获取到Preferences文件对应的实例后,可以从Preferences实例中读取数据,或者将数据存入Preferences实例中。通过调用flush或者flushSync方法可以将Preferences实例中的数据回写到文件里。
-
-**图 1** 轻量级数据存储运作机制
-
-
-![](figures/zh-cn_image_0000001192123772.png)
-
-## 约束与限制
-
-- 因Preferences实例会加载到内存中,建议存储的数据不超过一万条,并及时清理不再使用的实例,以便减少非内存开销。
-- 数据中的key为string类型,要求非空且字符长度不超过80个。
-- 当数据中的value为string类型时,允许为空,字符长度不超过8192个。
-
diff --git a/zh-cn/device-dev/website.md b/zh-cn/device-dev/website.md
index 828da2a577fbd9258ae5b60131e58df35fab64ef..8585b5294294a8c3a86b0fc73f69997332486bd2 100644
--- a/zh-cn/device-dev/website.md
+++ b/zh-cn/device-dev/website.md
@@ -418,13 +418,6 @@
- [音视频录制开发指导](subsystems/subsys-multimedia-video-record-guide.md)
- [公共基础库开发指导](subsystems/subsys-utils-guide.md)
- [AI框架开发指导](subsystems/subsys-ai-aiframework-devguide.md)
- - 数据管理
- - 关系型数据库
- - [关系型数据库概述](subsystems/subsys-data-relational-database-overview.md)
- - [关系型数据库开发指导](subsystems/subsys-data-relational-database-guide.md)
- - 轻量级数据存储
- - [轻量级数据存储概述](subsystems/subsys-data-storage-overview.md)
- - [轻量级数据存储开发指导](subsystems/subsys-data-storage-guide.md)
- Sensor服务
- [Sensor服务概述](subsystems/subsys-sensor-overview.md)
- [Sensor服务使用指导](subsystems/subsys-sensor-guide.md)