推薦一款 在線+離線數據 同步框架 Dotmim.Sync

移動智能應用可以分為在線模式、純離線模式與“在線+離線”混合模式。在線模式下系統數據一般存儲在服務器端的大中型數據庫(如 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 等環境中使用。

9501fa419cc8ff3863a51f563bd3539b.png

文檔網站:?https://dotmimsync.readthedocs.io/?

Dotmim.Sync框架包含針對多種不同主流關系數據庫的子項目解決方案,每個子項目均發布為NuGet程序包,便于開發人員基于.NET平臺在項目中添加、移除與更新引用。Nuget 上一共發布了8個Nuget包:

c9ffb2e1647db0765e6a4c90a7b30e4d.png

其中 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 等在線+離線的場景 ,通常架構圖如下:

b27568c7bc6b89a6adf881d1f240f8e8.png

具備明顯的跨平臺優勢.NET Core ,因此采用.NET Core Web API架構創建基于REST風格的Web API。

核心步驟如下:

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

23537fa145f822fc14b9b6861f0c4489.png

Step 2 創建數據同步控制器,采用依賴注入的方式注入服務器端Web 代理提供程序:

83ac7d2370d15507d31fc661fb8cd7c0.png

Step 3 在控制器的 POST 方法中調用 HandleRequestAsync 方法,執行異步請求,完成數據同步功能:

df050f818da2f54319ca7ef413ac1c8f.png

上述完成了服務端的設置,接下來就是設置客戶端。我們以MAUI 為例,基于MAUI 設計移動端應用,以Android 系統進行說明:

主要步驟如下:

Step 1 在項目的AndroidManifest.xml文件中添加網絡訪問、讀寫外部存儲等權限。

df20cc0f28350676053fef030c0d7d57.png

Step 2 由于Google 從Android P開始已經明確規定禁止http協議額,但是我們的接口都是http協議,從Nougat(Android 7)一個名為“Network Security Configuration”的新安全功能也隨之而來。網絡安全性配置特性讓應用可以在一個安全的聲明性配置文件中自定義其網絡安全設置,而無需修改應用代碼。

ac334bbcf96c75bc71088f7f924b39f7.png

Step 3 在數據同步事件中,開啟子線程,在子線程中執行數據同步操作:

efae1809c3f766d93579f58d5eda0f3e.png

16f2b7898daa543defcacd1501dc68d8.png

在數據同步過程中,有兩個問題是需要明確的,數據同步方向與沖突問題解決:

0f4101c0551471a790efb2597d31955e.png

首先執行數據同步的常規過程,由客戶端發起數據同步 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 表征客戶端為所有沖突的獲勝方

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280359.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280359.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280359.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何在Windows 10中將您喜歡的設置固定到開始菜單

If you find you’re accessing the same settings over and over in Windows 10, you can add these settings to the Start menu as tiles for quick and easy access. We’ll show you how to do this. 如果發現要在Windows 10中反復訪問相同的設置,則可以將這些…

20155202《網絡對抗》Exp9 web安全基礎實踐

20155202《網絡對抗》Exp9 web安全基礎實踐 實驗前回答問題 (1)SQL注入攻擊原理,如何防御 SQL注入產生的原因,和棧溢出、XSS等很多其他的攻擊方法類似,就是未經檢查或者未經充分檢查的用戶輸入數據,意外變成…

web前端工程師熱門崗位技能要求前瞻

春節假期以后,稍作調整,馬上就要迎來求職高峰期。作為一名前端工程師或者有意向轉行從事前端相關工作的人,你是否對2019年的前端市場有了新的解讀,對于前端的企業崗位要求有了新的理解。今天我就跟大家分享一下2019年web前端熱門崗…

MVC Html.AntiForgeryToken() 防止CSRF***

MVC中的Html.AntiForgeryToken()是用來防止跨站請求偽造(CSRF:Cross-site request forgery)***的一個措施,它跟XSS(XSS又叫CSS:Cross-Site-Script),***不同,XSS一般是利用站內信任的用戶在網站內插入惡意的腳本代碼進行***,而CSRF則是偽造成受信任用戶對網站進行***…

如何反序列化派生類

前言上回,我們講解了《如何序列化派生類》。那如何反序列化派生類呢?假設有一個 Person 抽象基類,其中包含 Student 和 Teacher 派生類:public class Person {public string Name { get; set; } }public class Student : Person {…

目標跟蹤 facebook_如何關閉Facebook Messenger的位置跟蹤(如果已啟用)

目標跟蹤 facebookIt seems like everyone is tracking our location now. Not surprisingly, Facebook Messenger can also transmit a significant amount of information on your location activity. If you use Messenger, here’s how to make sure it’s not reporting y…

哪位大兄弟有用 cMake 開發Android ndk的

一直用 Android studio 開發ndk,但是gradle支持的不是很好,只有experimental 版本支持 配置各種蛋疼。主要每次新建一個module都要修改配置半天。之前也看到過google 開發文檔有提到 cmake 但是一直沒用。哪位大兄弟用過,說下經驗 哪位大兄弟…

restfull知識點

網絡應用程序,分為前端和后端兩個部分。當前的發展趨勢,就是前端設備層出不窮(手機、平板、桌面電腦、其他專用設備......)。因此,必須有一種統一的機制,方便不同的前端設備與后端進行通信。這導致API構架的…

云計算基礎知識:CPU虛擬化

虛擬化技術的分類主要有服務器虛擬化、存儲虛擬化、網絡虛擬化、應用虛擬化。服務器虛擬化技術按照虛擬對象來分,可分為:CPU虛擬化、內存虛擬化、I/O虛擬化;按照虛擬化程度可分為:全虛擬化、半虛擬化、硬件輔助虛擬化。將不同的虛擬化對象和程…

WPF-18 INotifyPropertyChanged 接口

我們先來看看微軟官方給出的定語:通知客戶端屬性值已經更改。其實對于一個陌生小白來說,很難通過這句話來理解其中的原理,這個接口在WPF和Winform編程中經常會用到,下面是該接口的定義:namespace System.ComponentMode…

頭腦風暴 軟件_頭腦風暴和思維導圖的最佳網站和軟件

頭腦風暴 軟件A mind map is a diagram that allows you to visually outline information, helping you organize, solve problems, and make decisions. Start with a single idea in the center of the diagram and add associated ideas, words, and concepts connected ra…

NULL的陷阱:Merge

NULL表示unknown,不確定值,所以任何值(包括null值)和NULL值比較都是不可知的,在on子句,where子句,Merge或case的when子句中,任何值和null比較的結果都是false,這就是NULL…

Python實現將不規范的英文名字首字母大寫

Python實現將不規范的英文名字首字母大寫 這篇文章給大家主要介紹的是利用map()函數,把用戶輸入的不規范的英文名字,變為首字母大寫,其他小寫的規范名字。文中給出了三種解決方法,大家可以根據需要選擇使用,感興趣的朋…

使用 System.Text.Json 時,如何處理 Dictionary 中 Key 為自定義類型的問題

在使用 System.Text.Json 進行 JSON 序列化和反序列化操作時,我們會遇到一個問題:如何處理字典中的 Key 為自定義類型的問題。背景說明 例如,我們有如下代碼:// 定義一個自定義類型 public class CustomType {public int Id { get…

極限編程 (Extreme Programming) - 發布計劃 (Release Planning)

編寫用戶故事后,您可以使用發布計劃會議來創建發布計劃。發布計劃指定 將為每個系統版本實現哪些用戶故事以及這些版本的日期。這給出了一組用戶故事供客戶在迭代計劃會議期間進行選擇,以便在下一次迭代期間實施。然后將這些選定的故事翻譯成單獨的編程任…

使用Ubuntu的公用文件夾輕松地在計算機之間共享文件

You’ve probably noticed that Ubuntu comes with a Public folder in your home directory. This folder isn’t shared by default, but you can easily set up several different types of file-sharing to easily share files on your local network. 您可能已經注意到&am…

NSA泄露的惡意軟件DoublePulsar感染了數萬臺Windows電腦

本文講的是NSA泄露的惡意軟件DoublePulsar感染了數萬臺Windows電腦,安全研究人員認為,世界各地的腳本小子和在線犯罪分子正在利用Shadow Brokers 黑客組織上周泄露的NSA黑客工具,致使全球數十萬臺Windows計算機正面臨網絡攻擊威脅。 上周&…

Nginx、LVS及HAProxy負載均衡軟件的優缺點詳解

轉自:https://www.csdn.net/article/2014-07-24/2820837 摘要:Nginx/LVS/HAProxy是目前使用最廣泛的三種負載均衡軟件,一般對負載均衡的使用是隨著網站規模的提升根據不同的階段來使用不同的技術,具體的應用需求還得具體分析&…

windows下使用nginx調試簡介

安裝使用 nginx是一個反向代理服務器,在web開發調試中經常用到,寫一個簡單的使用說明和總結。 1. 下載 點擊官網下載地址 下載對應版本的nginx并解壓 2. 配置 在解壓的目錄下找到conf/nginx.conf文件添加所需監聽和代理的server # 項目名稱server {liste…

MASA Framework 命令查詢職責分離

概念CQRS (https://learn.microsoft.com/zh-cn/azure/architecture/patterns/cqrs)是一種與領域驅動設計和事件溯源相關的架構模式, 它的全稱是Command Query Responsibility Segregation, 又叫命令查詢職責分離, Greg Young在2010年創造了這個術語, 它是基于Bertrand Meyer 的…