天天看點

SQL Server 多表資料增量擷取和釋出 1功能需求:開發問題:開發思路:

功能需求:

子公司統一門戶系統已完成開發,安全運作一年。接到通知,總部也開發了一套統一門戶,要求各子公司使用總部開發的平台,子公司上司讨論決定使用總公司開發的平台,但是也不放棄自己開發的平台,而使用一個折中的方案——使用子公司統一平台釋出資訊後需要将資料同步到總公司開發的平台資料庫中(時間間隔需要越短越好)

開發問題:

1、無法提供統一門戶系統源碼,隻能提供門戶表的資料字典

2、上司要求基于門戶表内容進行資料變化記錄功能——當資料變化(新增,編輯,删除),同步資訊到總公司平台,同時本地記錄變化資訊(永久儲存或者儲存幾個月)

3、需要保證同步的準确性和資料變化的實效性

開發思路:

在開發前,首先考慮的了幾個問題:

1、無法擷取統一門戶平台源代碼,哪些技術方法就不能使用

2、如何實時記錄資料庫表的變化資訊,寫一個循環服務還是有工具軟體可以實作

3、用什麼技術進行開發,選取什麼應用作為開發模式

一、首先基于第一點,無法得到源代碼,如果在有源代碼的前提下,可以采取的方式為——對需要修改的表,進行代碼層更改,建立一張表曆史資訊表,在對應增加删除修改的方法前後的前後進行日志記錄。因為沒有源碼,服務->資料庫的這條路徑就走不通,隻能想辦法走資料庫->服務這條路。

二、實時記錄資料庫表變化資訊,通過百度找到了倆種可能實作的方式。

1、SqlDependency

SqlDependency是封裝在.net framework種的一個幫助類庫,可以實作對sqlserver 資料庫的單表監聽

好處:

1、使用簡潔

2、網上資源較多

壞處:

1、版本好像隻支援sqlserver 2005,太局限

2、實作邏輯太複雜,且隻是對單表監控,如果要對多表,還需自己定制化修改

3、根據demo,調試運作發現無法實作監聽功能(本機用的是sqlserver 2008 r2版本,估計正好和第1點對應)

2、變更資料捕獲(Change Data Capture 即CDC)功能

CDC功能主要捕獲SQLServer指定表的增删改操作,由于任何操作都會寫日志(哪怕truncate),是以CDC的捕獲來源于日志檔案。日志檔案會把更改應用到資料檔案中,同時也會标記符合要求的資料标記為需要添加跟蹤的項。然後通過一些配套函數,最後寫入到資料倉庫中。大概流程:

SQL Server 多表資料增量擷取和釋出 1功能需求:開發問題:開發思路:

cdc流程.png

1、在SQLServer2008(含)以後的企業版、開發版和評估版中可用。支援的資料庫版本更多

2、網上對CDC的講解和使用文檔很多,友善學習

3、sqlserver自身的服務,安全可靠,且支援多表(隻需一條配置語句),簡單友善,效率高

4、友善運維

三、項目基于.Net開發,先編寫一個測試demo,使用控制台程式。

大體的思路是:

建立三個類庫+一個服務

模型層,公共幫助層,業務邏輯層+UI(控制台)

步驟1:基于cdc功能配置資料庫需要的表,完成資料捕獲功能配置。

步驟2:編寫一個服務:循環秒後讀取CDC新生成的資料捕獲表,根據時間戳擷取需要每張表的資料,将擷取的資料放入一個隊列中,同時将資料序列化放入日志表,設定标志位:未讀狀态

步驟3:開啟一個方法——循環秒讀取隊列中的内容,如果隊列中存在值,啟動事務,同時修改資料庫日志表目前資訊的狀态位和發送資訊到總公司統一門戶平台