[英]Sync MySQL and MSSQL databases through windows service
我必須同步兩個數據庫的2個表,其中一個是MSSQL,另一個是MySQL。 我必須通過Windows服務來執行此操作。 我當前創建了Windows服務,目前添加到該服務中的是:從MySQL數據庫獲取數據並將其插入到數據適配器中,我計划通過事務插入從該數據適配器將數據移至MSSQL數據庫您能告訴我解決此問題的最佳方法是什么,如果我現在正在做的事情在正確的軌道上,那么我是第一次做這樣的事情。
好吧,可能有兩種方法可以解決此問題。 您沒有提到表的數量和大小,所需的同步頻率,因此我的回答可能不是100%相關。 無論如何,我的建議是:
Windows Service中實現的同步邏輯會定期通過執行以下查詢來檢查每個表是否有要同步的數據(出於性能原因,請使用純IDataReader):
SELECT * from TEST_TABLE,其中SyncDate為空
如果以上語句返回數據,則:
UPDATE TEST_TABLE SET SyncDate = @ DateTime.Now其中ID_PRIMARY_KEY IN(來自包裝的標識)
以上算法應同時應用於兩個數據庫
對於這種工作,SQL Server Integration Services是必經之路。
SSIS用於提取,轉換和加載數據。 (ETL過程)
您需要為從MySQL到MSSQL的數據轉換的每個步驟設計一個工作流程。
然后,您創建一個作業並配置其計划,它將由SQL Server執行。
無需從頭開始開發並且很難維護。
如果將mySql數據庫添加為鏈接服務器(sp_addlinkedserver),那么我認為您可以在MS SQL數據庫上的存儲proc中執行以下操作:
insert table1(col1)
select col1
from openquery('MySqlLinkedDb','select col1 from mySqlDb.dbo.table2')
如果您必須通過Windows服務執行此操作,我很好奇您如何從MySQL接收數據? 什么是發起對服務的調用以及數據以什么形式傳遞? 您要更改還是要刷新數據?
例如,如果收到DataTable或其他某種IEnumerable及其完全刷新,則可以使用SqlBulkCopy.WriteToServer()。 那將是最快和最有效的。
湯姆
如果您已經准備好將MySQL數據移至SQL。 我建議您將它們放在單獨的表上,然后發出“合並”命令以合並數據。 確保您標記回已更新的數據,以便現在可以將其取回並推送至MySQL:
MERGE TableFromMySQL AS TARGET USING TableFromSQL AS SOURCE
ON (TARGET.PrimaryKey = SOURCE.PrimaryKey)
WHEN Matched AND (TARGET.Field1 <> SOURCE.Field1
OR TARGET.Field2 <> SOURCE.Field2
OR .. put more field comparison here that you want to sync
THEN
UPDATE
SET TARGET.Field1 = SOURCE.Field1,
TARGET.Field2 = SOURCE.Field2,
//flag the target field as updated
TARGET.IsUpdated = 1,
TARGET.LastUpdatedOn = GETDATE()
WHEN Not Matched
THEN
INSERT(PrimaryKey, Field1, Field2, IsUpdated, LastUpdatedOn)
VALUES(SOURCE.PrimaryKey, SOURCE.Field1, SOURCE.Field2, 1, GETDATE());
此時,您現在可以使用IsUpdated = 1查詢MySQL表,並將所有值推送到MYSQL數據庫。 我希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.