簡體   English   中英

將客戶端與服務器數據庫同步的最有效方法是什么

[英]What is the most efficient way to sync clients with server database

我將開發一個可以在線和離線使用的移動應用程序。

客戶

  1. 客戶只能看到數據。 他們無法更改服務器數據庫或其數據庫中的任何內容。
  2. 每個客戶端都有其數據庫,例如服務器數據庫的副本。 因為應用程序還必須脫機工作。 如果有可用的互聯網,則該應用會嘗試自行更新。

服務器

  1. 管理員可以通過管理員客戶端更改數據庫。 只有一個數據庫可為所有客戶端聯機提供服務。

我的問題是該怎么做。 最有效的方法是什么? 當管理員更改服務器數據庫並且客戶端要更新時,服務器應如何提供介於客戶端版本和服務器最新版本之間的數據。 例如:

服務器

  • 修訂1
  • 修訂2
  • 修訂版3
  • 修訂4

客戶A

  • 修訂1
  • 修訂2

客戶B

  • 修訂1

當客戶端A要更新時,它應該獲得修訂版3-4,而當客戶端B要更新時,它應該獲得修訂版2-3-4。

提前致謝。

您可以在數據庫中創建修訂表(增量ID)。 客戶端上線后,在啟動時,您的應用會檢查服務器的最大ID,並將其與客戶端的修訂ID進行比較。 如果服務器的最大ID大於客戶端的最大ID,它將根據服務器上的修訂表更新系統(您可以將修訂更新的過程名稱插入其他列,以便可以在檢查過程中選擇過程名稱,然后針對更新,否則其他列可能包含說明)

客戶端的修訂不應大於服務器的修訂。 如果是這樣,則應降級客戶的修訂版本。

如果表中缺少修訂版本,那么這不是問題,您的修訂更新過程將不會針對該版本運行。 如果您使用的是sql存儲過程,則客戶端更新將如下所示:(客戶端的版本為R2,服務器的版本為R6,R5被admin刪除)

exec sp_revision_update R3
exec sp_revision_update R4
exec sp_revision_update R6

在此示例中,R5已從服務器中刪除,並且R6 必須包含先前版本的修復程序,因為某些客戶端在刪除R5之前可能已經擁有R5。

您可以嘗試使用“ ID”進行檢查,因此您會從客戶端收到最大ID,服務器會檢查客戶端是否需要更新,請在服務器中最大顯示ID。 ID為4,最大 ID客戶端為2(客戶端A),您將其從3更新為最后一個ID,否則將執行任何操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM