解決方案之資料同步

2022-02-28 18:41:06 字數 2104 閱讀 1655

本篇要講的是資料庫資料的同步方案,關於區域網,或者兩台資料庫ip可見的同步情況,這裡不給出方案,因為這種情況資料庫本身就提供了有很多種效能卓越的方案,看幫助文件就可以解決。

本文要講的案例是:

有a,b兩台或者更多的資料庫伺服器,分處於不同的網路,資料庫ip不可見,埠不可見,現在需要

a中的 t1表          -----

>

單向同步到        b中的 t1表

a中的 t2表         

<

-----

>

雙向同步到       b中的 t2表

也就是ab兩資料庫伺服器的單向同步和雙向同步應該怎麼做?

在internet網中必須考慮網路速度,所以應該保證傳輸的資料量盡量小一點再小一點。

雙向同步就是做兩次單向同步而已,我們以從a伺服器上的t1表單向同步到b伺服器的t1表為例子說明同步方案。

我們來看看三種方案,然後比較一下。

方案一:

點評:這是最直接最粗暴也最安全的方案,但是如果同步的表資料比較多,這種方案肯定是行不通的。不過當資料量比較少時,比如說100條以內,則這種方案也凸現出了它的優點:安全,簡單。所以這種方案也是有用武之地的。

方案二:

點評:這種方案是比較常見但我覺得還不明智的方案,雖然它做到了進行細粒度的同步,但卻新增了很多附加操作,如增刪改操作都要更改is_sync的值,如果正好專案已經做到收尾階段,所有的資料層已經實現了, 再要加同步的話改動就比較大了,所以這種方案優點是同步精度提高,傳輸的資料量減少,但對原本的增刪改**影響較大。

與之相似的方案還有增加相同結構的表(稱為它的待同步表),用觸發器將增刪改操作記錄到這種待同步表中,然後按上面的流程實現的同步,那種方案也有同樣的許多附加內容,如新增觸發器和待同步表,也對現行系統造成增加負擔和複雜度的負面影響。

方案三:

看方案三之前先介紹一下rowversion這種字段型別,在mysql中是timestamp型別。

long long ago,msdn說:「每個資料庫都有乙個計數器,當對資料庫中包含rowversion列的表執行插入或更新操作時,該計數器值就會增加。此計數器是資料庫行版本。這可以跟蹤資料庫內的相對時間,而不是時鐘相關聯的實際時間。乙個表只能有乙個rowversion列。每次修改或插入包含rowversion列的行時,就會在rowversion列中插入經過增量的資料庫行版本值。」

具體的關於rowversion型別的說明就不詳細寫出來了,讀者可以在msdn上搜一下。總之,這種型別的字段會更著資料庫的記錄自動改變,不需手工操作,利用這個特性,設計出第三種同步方案。

點評:這種方案我覺得是同步大表的最優方案,它只有在做刪除操作的時候改成邏輯刪除,其他操作不用考慮到同步的問題,對已經存在的系統影響最少,而且也是精確同步,不占用緊張的網路資源,這種方案是本篇的主角,也是我大力推薦的方案。

在mysql中可以用 timestamp 型別實現,mysql的表中只要含有timestamp 字段(且是無預設值的),則當表有更新或增加時就會改變第乙個timestamp 型別欄位的值為當前時間,這同樣可以應用上述第三套方案。

在實際運用中,要看錶的大小來選擇同步方案,如果表較小則用第一種方案是最好的,如果表較大,則第三種是最佳方案。

鑑於這是乙個解決方案的文章,索性把方案說到具體的技術實現層面上來。

案例中的a需要將表資料傳送給b,這個如何實現呢?

實際中的情形通常是這兩個網路都不會開放除了**80之外的其他埠給外網呼叫,而且方案中都需要有乙個程式每隔一段時間掃瞄一次資料庫看是否有需要同步的資料,綜合這些情況,可以很容易想到用win service+ web service的方式解決。

而筆者推薦用win service+remoting的方式來做,據測試,使用remoting比web service方式快7-8倍。不過兩者都有傳送包大小的限制,所以傳送資料的時候最好分批此來傳,一次100或者1000條,以免因為資料報超過大小而同步失敗。

sqlserver資料庫同步解決方案

sqlserver資料庫同步準實時解決方案 1.需求 浪擎 映象系統簡介 浪擎 映象系統是業界成熟的應用系統複製解決方案,無需源和目標硬體規格或配置相同,具有準實時複製 系統和網路資源占用少 應用方式靈活等特點。浪擎 映象系統支援sqlserver資料庫 oracle資料庫 檔案系統等應用系統的準實...

兩台SQL Server資料同步解決方案

複製是將一組資料從乙個資料來源拷貝到多個資料來源的技術,是將乙份資料發布到多個 儲存站點上的有效方式。使用複製技術,使用者可以將乙份資料發布到多台 伺服器上,從而使不同的伺服器使用者都可以在許可權的許可的範圍內共享這份資料。複製技術可以確保分布在不同地點的資料自動同步更新,從而保證資料的一致性。sq...

MySQL和Redis 資料同步解決方案整理

現在在中集e棧工作,最近在做乙個redis箱格資訊資料同步到資料庫mysql的功能。自己想了想,也有大概方案。1.佇列同步,變跟資料2份,使用訊息佇列,乙份給redis消費,乙份給mysql消費。2.後台定時任務,定時重新整理redis中箱格資訊到資料庫。網上也到處找了下解決方案,發現這麼個問題,居...