1# 分布式数据服务组件<a name="ZH-CN_TOPIC_0000001124232845"></a>
2
3-   [简介](#section11660541593)
4-   [目录](#section161941989596)
5-   [约束](#section119744591305)
6-   [说明](#section1312121216216)
7-   [相关仓](#section1371113476307)
8
9## 简介<a name="section11660541593"></a>
10
11分布式数据服务(Distributed Data Service,DDS) 提供不同设备间数据库数据分布式的能力。通过结合帐号、应用和数据库三元组,分布式数据服务对数据进行隔离。在通过可信认证的设备间,分布式数据服务支持数据相互同步,为用户提供在多种终端设备上一致的数据访问体验。
12
13分布式数据服务支撑OpenHarmony系统上分布式管理数据,包含五部分:
14
15-   **服务接口**
16
17    分布式数据服务提供专门的数据库创建、数据访问、数据订阅等接口给内部其他部件调用,接口支持KV数据模型,支持常用的数据类型,同时确保接口的兼容性、易用性和可发布性。
18
19-   **服务组件**
20
21    服务组件负责服务内元数据管理、权限管理、备份和恢复管理以及多用户管理等、同时负责初始化底层分布式DB的存储组件、同步组件和通信适配层。
22
23-   **存储组件**
24
25    存储组件负责数据的访问、数据的缩减、事务、快照,以及数据合并和冲突解决等特性。
26
27-   **同步组件**
28
29    同步组件连结了存储组件与通信组件,其目标是保持在线设备间的数据库数据一致性,包括将本地产生的未同步数据同步给其他设备,接收来自其他设备发送过来的数据,并合并到本地设备中。
30
31-   **通信适配层**
32
33    通信适配层负责调用底层公共通信层的接口完成通信管道的创建、连接,接收设备上下线消息,维护已连接和断开设备列表的元数据,同时将设备上下线信息发送给上层同步组件,同步组件维护连接的设备列表,同步数据时根据该列表,调用通信适配层的接口将数据封装并发送给连接的设备。
34
35
36通过调用分布式数据服务接口实现分布式数据库创建、访问、订阅功能,服务接口通过操作服务组件提供的能力,将数据存储至存储组件,存储组件调用同步组件实现将数据同步,同步组件使用通信适配层将数据同步至远端设备,远端设备通过同步组件接收数据,并更新至本端存储组件。
37
38**图 1**  数据分布式运作示意图<a name="fig371116145419"></a>
39
40
41![](figures/distributed_datamgr_subsystem_architecture.png)
42
43## 目录<a name="section161941989596"></a>
44
45```
46/foundation/distributeddatamgr/datamgr_service
47├── services                      # 服务层代码
48│   └── distributeddataservice    # 分布式数据服务实现
49└── test                          # 测试用例资源
50```
51
52## 约束<a name="section119744591305"></a>
53
54-   如需使用分布式数据服务完整功能,需要申请ohos.permission.DISTRIBUTED\_DATASYNC权限。
55-   分布式数据服务的数据模型仅支持KV数据模型,不支持外键、触发器等关系型数据库中的技术点。
56-   分布式数据服务支持的KV数据模型规格:
57    -   设备协同数据库,Key最大支持896Byte,Value最大支持4MB。
58    -   单版本数据库,Key最大支持1KB,Value最大支持4MB。
59    -   每个程序最多支持同时打开16个DB。
60
61-   由于支持的存储类型不完全相同等原因,分布式数据服务无法完全代替业务沙箱内数据库数据的存储功能,开发人员需要确定要做分布式同步的数据,把这些数据保存到分布式数据服务中。
62-   分布式数据服务当前不支持自定义冲突解决策略。
63-   分布式数据服务当前流控机制针对KvStore的接口1秒最大访问1000次,1分钟最大访问10000次。KvManager的接口1秒最大访问50次,1分钟最大访问500次。
64
65## 说明<a name="section1312121216216"></a>
66
67分布式数据服务几个基本概念:
68
69-   **KV数据模型**
70
71    “KV数据模型”是“Key-Value数据模型”的简称,“Key-Value”即“键-值”。它是一种NoSQL类型数据库,其数据以键值对的形式进行组织、索引和存储。
72
73    KV数据模型适合不涉及过多数据关系和业务关系的业务数据存储,比SQL数据库存储拥有更好的读写性能,同时因在分布式场景中降低了数据库版本兼容和数据同步过程中冲突解决的复杂度而被广泛使用。分布式数据库也是基于KV数据模型,对外提供KV类型的访问接口。
74
75-   **分布式数据库事务性**
76
77    分布式数据库事务支持本地事务(和传统数据库的事务概念一致)和同步事务,同步事务是指在设备之间同步数据时,是以本地事务为单位进行同步,一次本地事务的修改要么都同步成功,要么都同步失败。
78
79-   **分布式数据库一致性**
80
81    在分布式场景中一般会涉及多个设备,组网内设备之间看到的数据是否一致称为分布式数据库的一致性。分布式数据库一致性可以分为**强一致性**、**弱一致性**和**最终一致性**。
82
83    -   **强一致性**:是指某一设备成功增、删、改数据后,组网内设备对该数据的读取操作都将得到更新后的值。
84    -   **弱一致性**:是指某一设备成功增、删、改数据后,组网内设备可能能读取到本次更新数据,也可能读取不到,不能保证在多长时间后每个设备的数据一定是一致的。
85    -   **最终一致性**:是指某一设备成功增、删、改数据后,组网内设备可能读取不到本次更新数据,但在某个时间窗口之后组网内设备的数据能够达到一致状态。
86
87    强一致性对分布式数据的管理要求非常高,在服务器的分布式场景可能会遇到。因为移动终端设备的不常在线、以及无中心的特性,分布式数据服务不支持强一致,只支持最终一致性。
88
89-   **分布式数据库同步**
90
91    底层通信组件完成设备发现和认证,会通知分布式数据服务设备上线。收到设备上线的消息后分布式数据服务可以在两个设备之间建立加密的数据传输通道,利用该通道在两个设备之间进行数据同步。
92
93    分布式数据服务提供了两种同步模式:**手动同步**和**自动同步模式**。**手动同步模式**支持指定同步的设备列表和同步模式(PULL、PUSH和PULL\_PUSH三种同步模式)。**自动同步模式**由分布式数据库来完成数据同步(同步时机包括设备上线、修改数据等),业务不感知同步操作。
94
95-   **单版本分布式数据库**
96
97    单版本是指数据在本地保存是以单个KV条目为单位的方式保存,对每个Key最多只保存一个条目项,当数据在本地被用户修改时,不管它是否已经被同步出去,均直接在这个条目上进行修改。同步也以此为基础,按照它在本地被写入或更改的顺序将当前最新一次修改逐条同步至远端设备。
98
99-   **设备协同分布式数据库**
100
101    设备协同分布式数据库建立在单版本分布式数据库之上,对于存入的KV数据中的Key前面拼接了本设备的DeviceID标识符,这样能保证每个设备产生的数据严格隔离,底层按照设备的维度管理这些数据,设备协同分布式数据库支持以设备的维度查询分布式数据,但是不支持修改远端设备同步过来的数据。
102
103-   **分布式数据库冲突解决策略**
104
105    分布式数据库多设备提交冲突场景,在给提交冲突做合并的过程中,如果多个设备同时修改了同一数据,则称这种场景为数据冲突。数据冲突采用默认冲突解决策略,基于提交时间戳,取时间戳较大的提交数据,当前不支持定制冲突解决策略。
106
107-   **数据库Schema化管理与谓词查询**
108
109    单版本数据库支持在创建和打开数据库时指定Schema,数据库根据Schema定义感知KV记录的Value格式,以实现对Value值结构的检查,并基于Value中的字段实现索引建立和支持谓词查询。
110
111-   **分布式数据库备份能力**
112
113    提供分布式数据库备份能力,业务通过设置backup属性为true,可以触发分布式数据服务每日备份。当分布式数据库发生损坏,分布式数据服务会删除损坏数据库,并且从备份数据库中恢复上次备份的数据。如果不存在备份数据库,则创建一个新的数据库。同时支持加密数据库的备份能力。
114
115
116## 相关仓<a name="section1371113476307"></a>
117
118分布式数据管理子系统
119
120[distributeddatamgr\_datamgr\_service](https://gitee.com/openharmony/distributeddatamgr_datamgr_service)
121
122[third\_party\_sqlite](https://gitee.com/openharmony/third_party_sqlite)
123
124
125