深入剖析減少每次同步資料量的6個方法

2021-04-14 06:19:57 字數 1359 閱讀 4151

說到同步資料,大最為較關心的就是如何盡可能地減少每次的同步資料量,以此來提高同步效率,降低對網路頻寬的消耗。針對大批量的資料同步,這一點是必須注意的。解決這個問題的關鍵點在於獲取差異資料,這也就是說,我們僅僅同步變化了的資料,至於沒有變化的,就不再同步。下文中,我們將介紹減少每次同步資料量的6個方法:

1.日期字段(時間戳)

一般情況下,在設計表的時候,新增兩個日期字段,createdon, changedon, 分別記錄資料產生時間和變更時間。同步程式可以根據兩個欄位來獲取差異的資料。

2.trigger

它可以實時獲取差異資料, trigger使用較為容易,不需要改變原表的結構,可以只監視部分的字段變更,以獲取你需要的變化資料,並對資料做二次處理。trigger需要你對源表的維護狀況比較了解,否則可能產生一些意想不到的影響。

3.sqlserver本身的復**務

本身支援多種資料同步方式,功能很強大,但是使用上會比較複雜,而且如果在同步過程中,需要對差異資料做二次處理,似乎無路可走。

這種方法可以保證隨時獲取某個時間段內新增(變化)的資料,同時對於追蹤問題也大有裨益。但是缺陷也不少,其一是這兩個字段完全由開發人員控制,切實保證這兩個字段每次都得到正確的維護比較困難,其二是不容易確定你下一次取差異資料的基準時間。

4.timestamp欄位

timestamp可以理解為行的版本號,每次插入或更新包含 timestamp 列的行時,timestamp 列中的值均會更新。利用這一特性,建立乙個包含源表id和timestamp值的基準表,就可以找到哪些資料發生變化了,每次同步成功後,再更新該基準表。

5.監控並記錄基於某資料物件的所有dml語句

這種方法,我沒有具體嘗試過,但是乙個很不錯的思路,如果網路狀況糟糕,而且對資料實時性要求不高,可以採用。具體做法是每天定時獲取你需要同步表的所有update, delete語句,然後定點打包傳送到另外一台伺服器執行。

6.使用binary_checksum

這個是我認為最簡單的方法。binary_checksum是sqlserver內建的乙個聚合函式,它可以針對一行,或者某些列計算出乙個值,如果它計算的那些列中的任何乙個值發生變化,那麼那個計算值就會發生變化。這樣我只要建立乙個包含源表id和最初計算值的基準表,就可以找到哪些資料發生變化了,每次同步成功後,再更新該基準表。與方法4不同的是,binary_checksum可以只監視部分變化的字段,這一點又類似於trigger了。

賽迪網it 技術:http://tech.ccidnet.com/art/1106/20071222/1318447_1.html  

PGA深入剖析

pga pga系統全域性區 program global area 程序全域性區 process global area pga是乙個記憶體區域,該區域包含了一些與某個特定伺服器程序相關的資料和控制資訊,每個程序都有自己的私有pga區,所以這塊區域只能被其所屬程序進入,而不能被其他程序訪問,所以在p...

epoll LT ET 深入剖析

epoll lt et 深入剖析 epoll事件有兩種模型 level triggered lt 水平觸發 socket接收緩衝區不為空 有資料可讀 讀事件一直觸發 socket傳送緩衝區不滿 可以繼續寫入資料 寫事件一直觸發 符合思維習慣,epoll wait返回的事件就是socket的狀態 ed...

深入剖析printf

printf主要是給控制台列印字串或者數字等。1 printf的引數列表printf const char format,2 printf首先呼叫va start.然後呼叫 output l,最後呼叫 ftbuf 3 output l會解析字串並呼叫va arg,獲取省略號的值,呼叫write st...