分布式数据实现跨设备数据同步的N个秘密 | 分布式数据管理解析(二)

上期我们给大家带来分布式数据管理如何完成数据存储,数据同步,数据跨端访问,并保证整个过程中跨设备数据安全的解读。

这都得益于分布式数据管理平台抽象出的三大关键技术——分布式数据库,分布式文件系统和融合搜索。

那么这三大技术究竟如何具体实现全场景多设备上的数据保存,数据同步,数据访问,让我们一一来详细解读。今天我们率先进入分布式数据库的原理解析和接口介绍。

分布式数据库

分布式数据库主要应用在跨设备的数据库数据同步上,例如实现手机和手表,手机和大屏,手机跟手机等设备间的联系人、日历、媒体等源数据同步。

这么说可能有点抽象,我们来看一个具体的例子,下图中手机上增加的日历信息,可以通过分布式数据库的技术将新增数据自动同步到手表上。此外,当日历过期后可通过手表删除,删除的动作也会通过分布式数据库的技术,自动同步到手机上,达到一个端端的自动协同。

那么分布式数据库内部到底如何构成,又是如何实现端端数据同步的呢?

下面让我们深入分布式数据库的架构视图来窥探一二。

分布式数据库的架构视图

分布式数据库主要包括五个模块:

  • 对外接口

分布式数据库API,提供专门的数据库创建、数据访问、数据订阅等接口给应用程序调用,接口支持KV数据模型,支持常用的数据类型。

  • 管理组件:

管理组件负责数据库内元数据管理、权限管理、加密管理、备份和恢复管理以及多用户管理等、同时负责初始化底层分布式DB的存储组件、同步组件和通信适配层。

【元数据管理】:管理分布式数据库的信息,包含一些策略数据。【秘钥管理】:分布式数据库支持配置为加密,使用两层的秘钥保证机制,根秘钥会保存在TE硬件环境中,工作秘钥会送到TE中使用根秘钥来加解密,加密之后的工作秘钥保存在文件系统上,并且进行双备份,将解密之后的工作秘钥送到存储引擎中,对分布式数据库做加解密的动作。在数据库访问完成中,秘钥数据会被清理掉。【备份管理】:分布式应用程序在开发的时候,可将创建的分布式数据库设置为支持备份,这样的话在充电熄屏的情况下分布式数据库对所有要备份的数据进行备份。当我们检测到分布式数据库损坏情况下,可以使用备份的数据库来恢复,尽可能的保证分布式数据库的可靠性。【权限管理】:保证分布式数据库里面的数据不会被恶意应用访问或者篡改,保证数据物理上隔离。【调度框架】:调用存储引擎中存储的数据,将数据串联起来,与另外一台设备进行同步。

  • 存储引擎

支持分布式数据库的数据存储和访问,提供数据库里面包括事务,订阅,数据库加密的实际实现,以及快照等数据库的高级特性,同时提供了结构化或者说Schema化的分布式数据库和索引管理的能力。

  • 同步组件

实现分布式数据库所有的同步逻辑,包括时间同步,水位同步和数据同步。同步组件连结了存储组件与通信组件,其目标是保持在线设备间的数据库数据一致性,包括将本地产生的未同步数据同步给其他设备,接收来自其他设备发送过来的数据,并合并到本地设备中。

那么到底什么是水位同步呢?
由于数据是以记录按时间由旧到新依次同步的,保证旧记录的同步完成在新纪录同步之前,因此同步进度其实是一个单调递增的时刻值,类似水位线,水位线之下的记录就是已经完成同步的数据。
水位同步用于协商确认同步双方的同步进度。当同步一方还原过数据库时,双方记录的同步进度就会存在差异,需要协商以便确认数据同步时记录的起始时刻。

那么为什么又需要时间同步呢?

由于各种原因两个设备上的系统时间其实是没法完全对齐的,因此,在数据库的数据同步时,如果两个设备同时修改了同一条数据,那么系统默认的冲突解决策略是通过时间的先后顺序去解冲突。但当一个设备的时间比当前设备的时间快很多的情况下,可能会导致数据解冲突的正确性,从而产生问题,因此需要进行设备间的时间同步。这样每个设备都会记录与其他设备的时间差,当当前设备把数据发送给其他设备的时候,该设备会在当前的具体时间上加入时间偏移,保存到其他设备上去,完成一个last one win的冲突解决策略,尽可能保证数据同步的正确性和一致性。

  • 通信组件

主要负责通信协议的实现,包括数据包数据帧的格式定义,以及数据在网络传输和文件系统存储的一个大小端的转换,以及数据发送和接收的一个拆包和组包的逻辑的实现。通信组件也把下面不同的物理传输通道做了一个适配,让同步组件感知不到具体的物理传输通道。

了解了分布式数据库的架构和运行,大家肯定迫不及待想知道分布式库到底提供了哪些数据模型,它的同步模型又是怎么样的,下面就让我们一起来探索一下。

分布式数据库的数据模型

HarmonyOS上的分布式应用可以创建一到多个分布式数据库,称为KvStore。KvStore通过数据库的名字storeId来标识,分布式数据由一系列的Entry组成。每个Entry由一对KV(KEY&VALUE)。
KV数据模型在数据的访问读写以及同步的时候是非常简单的,包括解冲突。简单来说就是当KEY相同的话,进行覆盖,不相同则执行保存。
分布式数据库中的KvStore主要应对简单的业务场景。针对复杂的业务场景,分布式数据库提供Schema能力。应用程序开发者在创建控件和打开分布式数据库的时候,可以将VALUE的结构信息,也就是Schema定义出来,传递给分布式数据库。
Schema的结构包括版本号,模式,严格匹配还是兼容匹配,VALUE字段的定义(字段、字段层级、类型、是否允许为空、是否有默认值、是否建索引,单个还是联合索引),把信息组合成Schema信息,在创建和打开数据库的时候传递下来,这个时候KV分布式数据库就升级为文档型数据库,针对文档型数据库,我们支持关系型的语义查询。

分布式数据库的同步模型

在数据同步方面,和传统的云数据同步的模型相比,分布式数据库实现的是无中心点对点之间的数据同步,每个设备是一个没有中心的网络,两两设备之间进行数据同步。

每个设备节点只发送自身产生的数据,比如说设备A数据同步到设备B,设备B并不会把数据同步到其他设备上,不能发送从其他设备同步过来的数据,除非自己又做了修改更新。
每个设备按照时间顺序将分布式数据同步给其他设备,同时分别记录与每台设备同步的水位。 为此,分布式数据库提供自动同步和手动同步两种模式。自动同步,即整个同步过程及同步触发的这个动作,不需要应用程序或者开发人员参与,完全由分布式数据库内部进行实现。 手动同步,这种同步模式同步课程不需要应用程序来参与,但触发的动作,我们提供了一个sync接口让应用程序来调用和触发。通过sync接口的调用,应用程序可以决定什么时候同步,是否同步已经同步给哪些设备。数据同步基于KVStore的粒度进行,在建立可信关系的设备只有AppId和StoreId都相同的KVStore之间才能同步数据。我们来看一个例子,设备1中有数据库A, B, C,设备2上有数据库A(与设备1上的数据库A AppId和StoreId相同)和B(与设备1上的数据库B AppId和StoreId相同),设备1和设备2在建立了可信关系之后,进行数据库同步只会A与A,B与B,C由于在设备2上没有,因而不会进行同步。

说了这么多,HarmonyOS分布式数据库到底提供了哪些对外接口给到开发者们呢?

分布式数据库对外接口

分布式数据库对外接口主要包括两部分:支持一般场景数据模型的“轻量级KV接口”和针对复杂业务场景的“支持关系型语义的增强接口”。轻量级的KV接口包括三个部分:KvManager,KvStore和KvStoreResultSet。

  • KvManager提供了分布式数据库的创建、打开、关闭和删除的一些接口,以及一些相关的配置项;

  • KvStore是基于KvManager打开得到的一个分布式数据库对象,基于KvStore这个类,可以实现分布式数据库的数据增删改查,数据订阅,数据同步和创建滑动窗口,主要用于做数据访问;

  • KvStoreResultSet是一个查询的结果集。当我们创建结果集之后可以在这个结果集里面查询数据满足数据结果的总数,以及通过移动的方式循环的方式查询每一条数据。

支持关系型语义的增强接口包括两层,上面一层为“设置分布式数据库Schema接口”,下面一层为“设置关系型语义查询算子接口”。

其中,分布式数据库Schema接口包括Schema和FieldNode,Schema信息包括Value内部的结构,包含了哪些字段,以及其要建立哪些字段的索引,而FieldNode针对不同字段可以指定名字,类型,默认值,是否允许为空等这些属性。

Query,关系型语义查询算子接口,应用于在创建完Schema或者说结构化的分布式数据库之后,在后续进行数据库查询。使用Query查询算子可以实现关系型语义的查询,当前分布式数据库查询算子支持大小比较,范围比较,是否为空,多条件的组合,模糊匹配,排序以及limit+offset复杂条件式的查询。

由此,我们可以总结分布式数据库的特点:

  • 不依赖云
    和传统的云数据同步的模型相比,分布式数据库实现的是无中心点对点之间的数据同步。

  • 接口简单
    备份、加密特性简单可配,不需要业务实现复杂的逻辑。

  • 同步逻辑透明
    分布式数据库同步逻辑完全透明,同步过程应用程序完全不需要参与,完全由分布式数据库自己实现。

  • 提供时间同步、水位同步和冲突解决
    分布式数据库提供时间同步、水位同步和冲突解决的关键技术,保证数据在数据同步过程中的正确性和一致性。

  • 屏蔽不同的物理传输通道
    我们都知道,底层的物理传输通道有很多种(比如基于蓝牙的BR/BRE传输,如基于WiFi的局域网/P2P纯属),通过分布式数据库的技术,让业务不用感知这一层,降低开发学习成本。

为了能让大家更好的学习鸿蒙 (OpenHarmony) 开发技术,这边特意整理了《鸿蒙 (OpenHarmony)开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙 (OpenHarmony)开发学习手册》

入门必看:https://qr21.cn/FV7h05

  1. 应用开发导读(ArkTS)
  2. ……

HarmonyOS 概念:https://qr21.cn/FV7h05

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

如何快速入门?:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. 构建第一个JS应用
  4. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/353056.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Scrapy IP()类 编程指南(基础)

Scrapy IP()类 编程指南(基础) IP简介 工欲善其事,必先利其器,在聊Scapy IP类时,我们先要了解IP是什么。 IP指的是Internet Protocol(互联网协议)的数据包。Internet Protocol是互联网上用于在…

取消Vscode在输入符号时自动补全

取消Vscode在输入符号时自动补全 取消Vscode在输入符号时自动补全问题演示解决方法 取消Vscode在输入符号时自动补全 问题演示 在此状态下输入/会直接自动补全, 如下图 笔者想要达到的效果为可以正常输入/而不进行补全, 如下图 解决方法 在设置->文本编辑器->建议, 取消…

经典目标检测YOLO系列(三)YOLOV3的复现(1)总体网络架构及前向处理过程

经典目标检测YOLO系列(三)YOLOV3的复现(1)总体网络架构及前向处理过程 和之前实现的YOLOv2一样,根据《YOLO目标检测》(ISBN:9787115627094)一书,在不脱离YOLOv3的大部分核心理念的前提下,重构一款较新的YOLOv3检测器,来对YOLOv3有…

<蓝桥杯软件赛>零基础备赛20周--第19周--最短路

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周。 在QQ群上交流答疑&am…

OpenCV-28 全局二值化

一、形态学概念 什么是形态学? 1)指一系列处理图像型状特征的图像处理技术 2)形态学的基本思想是利用一直特殊的结构元(本质上是卷积核,且这个卷积核的值只有1和0)来测量或提取输入图像中相应的型状或特…

17. Spring Boot Actuator

17. Spring Boot Actuator Spring Boot执行器(Actuator)提供安全端点,用于监视和管理Spring Boot应用程序。 默认情况下,所有执行器端点都是安全的。 在本章中,将详细了解如何为应用程序启用Spring Boot执行器。 启用Spring Boot Actuator …

CAD-autolisp(三)——文件、对话框

目录 一、文件操作1.1 写文件1.2 读文件 二、对话框DCL2.1 初识对话框2.2 常用对话框界面2.2.1 复选框、列表框2.2.2 下拉框2.2.3 文字输入框、单选点框 2.3 Lisp对dcl的驱动2.4 对话框按钮实现拾取2.5 对话框加载图片2.5.1 幻灯片图片制作2.5.1 代码部分 一、文件操作 1.1 写…

架构篇28:业务高可用的保障-异地多活架构

文章目录 应用场景架构模式小结无论是高可用计算架构,还是高可用存储架构,其本质的设计目的都是为了解决部分服务器故障的场景下,如何保证系统能够继续提供服务。但在一些极端场景下,有可能所有服务器都出现故障。例如,典型的有机房断电、机房火灾、地震、水灾……这些极端…

【阿里云服务器数据迁移】 同一个账号 不同区域服务器

前言 假如说一台云服务器要过期了,现在新买了一台,有的人会烦恼又要将重新在新的服务器上装环境,部署上线旧服务器上的网站项目, 但是不必烦恼,本文将介绍如何快速将就旧的服务器上的数据迁移到新的服务器上. 包括所有的环境和网站项目噢 ! 步骤 (1) 创建旧服务器自定义镜像…

AI作画工具 stable-diffusion-webui 一键安装工具(A1111-Web-UI-Installer)

安装 下载最新版本确保你的 NVIDIA 显卡驱动程序是最新的(起码不能太老)启动安装程序在欢迎屏幕上单击下一步在屏幕上,选择要安装的内容如果你已经安装了 Python 3.10 和 Git,那么可以取消选中如果你不知道这些是什么&#xff0c…

Spring boot + Azure OpenAI 服务 1.使用 GPT-35-Turbo

Azure OpenAI 服务使用 GPT-35-Turbo 先决条件 maven 注意 beta.6 版本 <dependency><groupId>com.azure</groupId><artifactId>azure-ai-openai</artifactId><version>1.0.0-beta.6</version></dependency>问答工具类 pack…

Django介绍

一、介绍 Django是Python语言中的一个Web框架,Python语言中主流的web框架有Django、Tornado、Flask 等多种 优势:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等功能,是一个全能型框架,拥有自己的Admin数据管理后台,第三方工具齐全,性能折中 缺点:…

【深度学习:t-SNE 】T 分布随机邻域嵌入

【深度学习&#xff1a;t-SNE 】T 分布随机邻域嵌入 降低数据维度的目标什么是PCA和t-SNE&#xff0c;两者有什么区别或相似之处&#xff1f;主成分分析&#xff08;PCA&#xff09;t-分布式随机邻域嵌入&#xff08;t-SNE&#xff09; 在 MNIST 数据集上实现 PCA 和 t-SNE结论…

Sentinel:微服务守护神的崛起

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Sentinel&#xff1a;微服务守护神的崛起 前言Sentinel简介&#xff1a;微服务流控的新宠Sentinel工作原理 前言 想象一下你正在主持一场盛大的马拉松比赛&#xff0c;参赛者如潮水般汇聚&#xff0c…

换个思维方式快速上手UML和 plantUML——类图

和大多数朋友一样&#xff0c;Jeffrey 在一开始的时候也十分的厌烦软件工程的一系列东西&#xff0c;对工程化工具十分厌恶&#xff0c;觉得它繁琐&#xff0c;需要记忆很多没有意思的东西。 但是之所以&#xff0c;肯定有是因为。对工程化工具的不理解和不认可主要是基于两个逻…

JVM篇----第九篇

系列文章目录 文章目录 系列文章目录前言一、分代收集算法二、新生代与复制算法三、老年代与标记复制算法前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、分代…

数据结构(1)--> 顺序表

定义&#xff1a; 顺序表存储定义&#xff1a; 把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构&#xff0c;顺序表功能的实现借助于数组&#xff0c;通过对数组进行封装&#xff0c;从而实现增删查改的功能&#xff0c;严格意义上来说&#xff08;数组无法实现…

centos8源码安装python

前置条件&#xff0c;删除原来系统自带的python&#xff0c;如果系统自带的版本符合你的预期&#xff0c;就不用重新安装了。 yum remove python yum autoremove一、下载python 官网下载 这里是3.12.1版本 我的网盘下载 提取码&#xff1a;d8g1 文件名为Python-3.12.1.tgz 二…

Nginx进阶篇【五】

Nginx进阶篇【五】 八、Nginx实现服务器端集群搭建8.1.Nginx与Tomcat部署8.1.1.环境准备(Tomcat)8.1.1.1.浏览器访问:8.1.1.2.获取动态资源的链接地址:8.1.1.3.在Centos上准备一个Tomcat作为后台web服务器8.1.1.4.准备一个web项目&#xff0c;将其打包为war8.1.1.5.启动tomcat进…

MySQL:数据库索引详解

1、什么是索引&#xff1a; 索引是一种用于快速查询和检索数据的数据结构。常见的索引结构有: B 树&#xff0c; B树和 Hash。 索引的作用就相当于目录的作用。打个比方: 我们在查字典的时候&#xff0c;如果没有目录&#xff0c;那我们就只能一页一页的去找我们需要查的那个字…