簡體   English   中英

在服務器和多個客戶端之間同步數據庫更改

[英]sync database changes between server and multiple clients

我有一個主SQL Server數據庫(在線托管),該數據庫可以同步數據並將數據提供給多個客戶端(后者依次處理相同的數據)。 一些客戶端將不斷連接到Internet(並可以立即同步到主服務器),但是其他客戶端在某些時期(一次最多幾天)將無法訪問數據庫。 我在每台計算機上都有一個本地MS Access數據庫(主要在該數據庫上工作,並且在可用時將其與主機進行同步),我想知道如何將所有內容同步在一起而不丟失任何數據? 有些客戶端將幾天不連接,並且可能會與持續連接的客戶端編輯相同的行,當連接到Internet時如何同步以確保它們之間不會丟失數據?

由於與MS Access文件和SQL Server db不兼容,我計划將所有數據導入DataTables並進行類似的管理,然后再將信息發送回數據庫(因此,這將使sql server更改跟蹤成為不可能)。 我聽說過Microsoft的Sync Framework(但到目前為止還沒有發現)。 我確實考慮過將執行的語句手動存儲在本地計算機上,然后在連接到Internet時執行它們(但這可能會用無法獲得同步機會的舊數據覆蓋新數據)。 我無所適從,我將如何解決這些問題將不勝感激。

謝謝您的幫助!

並不是要作為一個全面的答案,但這對於評論來說太長了:

程序員必須提出適用於數據類型且用戶期望的合理的合並規則 ,並且必須創建自己的框架來支持這些規則的合並。 沒有適合每個數據的PlanX。

三種不同的值類型,每個都有一個示例,只有程序員才能根據自己對數據的了解來決定。

例如,一個int值:客戶端A和客戶端B獲得值1。它可能包含最后一個值:客戶端A在7月28日編輯為4,並在8月2日同步到服務器。 客戶B在7月29日編輯為3,並在7月29日同步。 服務器到底應該包含哪一個? 如果客戶端C在客戶端A同步並編輯為7之前得到3,該怎么辦? 當然,它也可能是一個計數器:客戶端A添加了3,客戶端B添加了2,並且兩者都同步之后,服務器應包含6。

日期值:客戶端A在7月28日進行編輯並在8月2日進行同步,客戶端B在7月29日進行編輯並在7月29日進行同步。 可能有兩個簡單的值:可能是LastEditOn字段,其中應包含客戶端B設置的日期;或者是LastSyncOn字段,應包含客戶端A設置的日期。

一個文本字段:兩個客戶端都獲得“文本”。 客戶端A在7月28日更改為“ SomeText”,並在8月2日同步。 客戶端B在7月29日更改為“ TextEtc”,並在7月29日進行同步。

根據您的需要,您可以合並到:

  • TextEtc
  • SomeText
  • SomeTextEtc
  • SomeText
    B無法合並的編輯:TextEtc
  • 文本
    由A編輯:SomeText
    由B編輯:TextEtc
  • 文本
    由B編輯:TextEtc
    由A編輯:SomeText

僅列舉幾種可能性。

您會看到,程序員還不是多余的。 您必須為每種記錄類型和每條數據決定如何將所有可能的更改合並為合理的新單個值。 我們無法為您做任何事情,因為我們不知道您的數據到底是什么。

我們能說什么:您肯定會需要最后一次更改記錄的日期。 您可能還需要最后一次更改某些字段的日期,或者最后一次與服務器同步的某些字段。

在不可能合理合並的地方,您必須使用 某個客戶端只能在服務器上鎖定該數據時才更改該數據。 由於客戶可能會在兩者之間走開,因此您的鎖只能保持一定的時間。

暫無
暫無

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

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