推荐一款 在线+离线数据 同步框架 Dotmim.Sync

推荐,一款,在线,离线,数据,同步,框架,dotmim,sync · 浏览次数 : 2943

小编点评

## Mobile App Data Synchronization Framework This document provides an overview of the data synchronization framework for mobile applications. It covers both online and offline modes and the "online+offline" hybrid approach. **Online Mode:** * Data is stored on the server-side database (e.g., SQL Server, Oracle, MySQL). * The mobile app depends on a stable and reliable network connection. * Requires data synchronization between the server and the mobile app. **Pure Offline Mode:** * Data is stored on the mobile device's lightweight database (e.g., SQLite). * The mobile app does not require a network connection. * No data synchronization is required. **Hybrid Mode:** * A hybrid approach that combines elements of both online and offline modes. * Data is stored on the server-side, but some data is also stored on the mobile device. * This provides flexibility and data availability in both online and offline scenarios. **Challenges in Data Synchronization:** * Mobile networks can be complex, dynamic, and have unreliable connection. * Data synchronization requires robust data transfer mechanisms. **Dotmim.Sync Framework:** * An open-source framework for building cross-platform data synchronization solutions. * Supports multiple popular relational databases (SQL Server, SQLite, MySQL, MariaDB). * Provides solutions for both server-to-client and client-to-server data synchronization. **Key Features of Dotmim.Sync:** * Supports various data table setups and synchronization directions (bidirectional, download-only, upload-only). * Provides conflict resolution mechanisms to handle data conflicts. * Offers a flexible and scalable architecture for building data synchronization solutions. **Dotmim.Sync Framework in Action:** * **.NET Core Web API Architecture:** A RESTful API is created for data synchronization. * **Android Development:** Data synchronization is implemented using MAUI on the Android side. **Additional Notes:** * The provided information is intended for a general overview and may require specific details depending on the implementation. * The context requires understanding the Dotmim.Sync framework and its capabilities.

正文

移动智能应用可以分为在线模式、纯离线模式与“在线+离线”混合模式。在线模式下系统数据一般存储在服务器端的大中型数据库(如 SQL Server、Oracle、MySQL 等),移动应用依赖于稳定可靠的网络连接;纯离线模式下系统数据一般存储在移动终端的轻量级数据库(如 SQLite等),移动应用不需要网络连接;“在线+离线”混合模式则比较复杂,通常情况下系统数据存储在服务器端,移动终端暂存部分数据,因而形成了分布式异构数据库。在移动应用运行过程中,当移动终端或服务器端执行数据更新操作后,为了保证数据的完整性和一致性,需要进行双向的数据同步。然而,由于移动网络本身具有复杂性、动态性、弱连接性以及通信延迟与带宽相对有限等特性,因而移动应用的数据同步技术备受考验。

微软高级软件工程师 Sébastien Pertus 在 GitHub 网站开源了一种跨平台的关系数据库同步框架 Dotmim.Sync:https://github.com/Mimetis/Dotmim.Sync,该框架基于.NET Standard 2.0  研发,支持在 IOT、 Xamarin、.NET、MAUI 等环境中使用。

Architecture01.png

文档网站: https://dotmimsync.readthedocs.io/ 

Dotmim.Sync框架包含针对多种不同主流关系数据库的子项目解决方案,每个子项目均发布为NuGet程序包,便于开发人员基于.NET平台在项目中添加、移除与更新引用。Nuget 上一共发布了8个Nuget包:

image

其中 Dotmim.Sync.Core是核心的NuGet程序包主要执行数据同步的核心逻辑。Dotmim.Sync.SqlServer、Dotmim.Sync.Sqlite、Dotmim.Sync.MySql、Dotmim.Sync.MariaDB 分别针对SQL Server、 SQLite、MySQL、MariaDB数据库的 NuGet程序包,可以根据实际项目的数据库部署需要,基于 .NET平台在服务器端与客户端程序中分别引用相应的NuGet程序包,进而完成服务器端与客户端数据库数据的同步。Dotmim.Sync.Web.Server 与 Dotmim.Sync.Web.Client NuGet程序包实现 HTTP协议通过Web服务器完成服务器端与客户端数据库的同步操作。

代码仓库里包含了丰富的示例程序,特别是IOT,MAUI,Xamarin 等在线+离线的场景 ,通常架构图如下:

建筑

具备明显的跨平台优势.NET Core ,因此采用.NET Core Web API架构创建基于REST风格的Web API。

核心步骤如下:

Step 1 在服务配置方法中注册同步提供程序:

image


Step 2 创建数据同步控制器,采用依赖注入的方式注入服务器端Web 代理提供程序:

image

Step 3 在控制器的 POST 方法中调用 HandleRequestAsync 方法,执行异步请求,完成数据同步功能:

image

上述完成了服务端的设置,接下来就是设置客户端。我们以MAUI 为例,基于MAUI 设计移动端应用,以Android 系统进行说明:

主要步骤如下:

Step 1 在项目的AndroidManifest.xml文件中添加网络访问、读写外部存储等权限。

image

Step 2 由于Google 从Android P开始已经明确规定禁止http协议额,但是我们的接口都是http协议,从Nougat(Android 7)一个名为“Network Security Configuration”的新安全功能也随之而来。网络安全性配置特性让应用可以在一个安全的声明性配置文件中自定义其网络安全设置,而无需修改应用代码。

image

Step 3 在数据同步事件中,开启子线程,在子线程中执行数据同步操作:

image

image


在数据同步过程中,有两个问题是需要明确的,数据同步方向与冲突问题解决:

image

首先执行数据同步的常规过程,由客户端发起数据同步 POST 请求,服务器端.NET Core Web API尝试执行数据同步任务。其次,当检测到数据冲突时,服务器端检测预先设置的 ConflictResolutionPolicy 属性值,如果其值为 Serverwins,则服务器端获胜,将服务器端的变化数据强制应用到客户端的数据库中,反之则客户端获胜,将客户端的变化数据强制应用到服务器端的数据库中。

1)数据同步方向在 Dotmim.Sync 框架中,提供了用于表征数据同步方向的枚举 SyncDirection。该枚举包含 3 个值:Bidirectional(默认值)、DownloadOnly和 Upload⁃Only,分别对应“双向同步”、“仅下载同步”与“仅上传同步”3 种方向,可以具体为每个数据表SetupTable 分别设定同步方向。

2)通常情况下冲突问题解决Dotmim.Sync 框架采用 SyncOption 对象的配置策略属性 ConflictResolutionPolicy解决数据冲突问题。

ConflictResolutionPolicy的可选项如下:

(1) ConflictResolutionPolicy.Serverwins, 默认选项,表征服务端为所有冲突的获胜方。

(2) ConflictResolutionPolicy.Clientwins 表征客户端为所有冲突的获胜方

与推荐一款 在线+离线数据 同步框架 Dotmim.Sync相似的内容:

推荐一款 在线+离线数据 同步框架 Dotmim.Sync

移动智能应用可以分为在线模式、纯离线模式与“在线+离线”混合模式。在线模式下系统数据一般存储在服务器端的大中型数据库(如 SQL Server、Oracle、MySQL 等),移动应用依赖于稳定可靠的网络连接;纯离线模式下系统数据一般存储在移动终端的轻量级数据库(如 SQLite等),移动应用不需要

推荐一套轻量级的开源图床系统:Light Fast Picture

如果您跟我一样平时有些博客的习惯,那么图片存储是否有困扰过你呢?今天就给大家推荐一款不错的开源图床系统:Light Fast Picture 它是一个基于koa + vue3.x + typescript实现的图床工具。它可以帮助用户快速上传图片到云端,并返回图片链接,方便用户在网页、社交媒体等平台

【OpenVINO™】基于 C# 和 OpenVINO™ 部署 Blazeface 模型实现人脸检测

Blazeface模型是Google推出的一款专为移动GPU推理量身定制的轻量级且性能卓越的人脸检测器,BlazeFace 在旗舰移动设备上以200-1000 + FPS的速度运行。 在本文中,我们将使用OpenVINO™ C# API 部署 Blazeface 实现人脸检测。

为什么我推荐你使用 systemd timer 替代 cronjob?

概述 前几天在使用 Terraform + cloud-init 批量初始化我的实验室 Linux 机器。正好发现有一些定时场景需要使用到 cronjob, 进一步了解到 systemd timer 完全可以替换 cronjob, 并且 systemd timer 有一些非常有趣的功能。 回归话题:

#PowerBi Superchange PowerBi 开篇(1)

本书由B站京西漫步老师推荐,并提供了相应的学习资源,有同感兴趣的朋友,可以加我好友免费分享资源。 本书主要以总结笔记,原文+译文+部分案例实操为主。 预计更新时间为23年6月-23年7月。 本系列笔记背景,笔者在经过一年左右的陆陆续续的学习和实践中,对Powerbi有了初步的应用和学习,但是零散的学

【OpenVINO™】YOLOv10在CPU上也能实现50+FPS推理—使用OpenVINO C++部署YOLOv10

英特尔发行版 OpenVINO™ 工具套件基于 oneAPI 而开发,可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,适用于从边缘到云的各种英特尔平台上,帮助用户更快地将更准确的真实世界结果部署到生产系统中。YOLOv10是清华大学研究人员近期提出的一种实时目标检测方法,通过消除NMS、...

万字长文详解如何使用Swift提高代码质量

京喜APP最早在2019年引入了Swift,使用Swift完成了第一个订单模块的开发。之后一年多我们持续在团队/公司内部推广和普及Swift,目前Swift已经支撑了70%+以上的业务。通过使用Swift提高了团队内同学的开发效率,同时也带来了质量的提升,目前来自Swift的Crash的占比不到1%。在这过程中不断的学习/实践,团队内的Code Review,也对如何使用Swift来提高代码质量有更深的理解。

理论+实践,揭秘昇腾CANN算子开发

摘要: 本文介绍了CANN自定义算子开发的几种开发方式和算子的编译运行流程。然后以开发一个DSL Add算子为例,讲解算子开发的基本流程。 本文分享自华为云社区《昇腾CANN算子开发揭秘》,作者:昇腾CANN 。 开发者在利用昇腾硬件进行神经网络模型训练或者推理的过程中,可能会遇到以下场景: 训练场

推荐一款在浏览器编辑`Blazor`的`IDE`

不知道是否有Blazor用户羡慕过React或者Vue用户,在一些组件库中,它们就提供了在当前的组件预览对于组件的实时编辑并且预览? 比如semi-design的这种 在比如codepen这种 由于Blazor的诞生时间对比现有的前端来说太短了,以至于这种在线编译的基本没有, 有时候在写界面的时候调

Stirling-PDF 安装和使用教程

PDF (便携式文档格式) 目前已经成为了文档交换和存储的标准。然而,找到一个功能全面、安全可靠、且完全本地化的 PDF 处理工具并不容易。很多在线 PDF 工具存在隐私和安全风险,而桌面软件往往价格昂贵或功能有限。那么,有没有一种解决方案能够兼顾功能强大、安全可靠和经济实惠呢? 今天给大家推荐一款