我一直在尝试使用 Microsoft Sync framework v2.1 来同步两个 MS SQL Server 数据库,但是只同步 35 个表大约需要 2 个小时,并且记录总数少于 500,000 条记录,这根本不被接受。
所以我是否遗漏了任何可以优化性能的方法,因为这只是一个测试数据,而生产数据要大得多。我还发现 MS Sync Framework 正在比较源跟踪表和目标跟踪表中的每条记录——基表中的每条记录在跟踪表中都有相应的记录——而更新和插入仅在两个数据库之一中完成。或者我应该把 Sync 框架扔掉并使用其他东西。
这是我用于配置和同步的代码。
任何帮助表示赞赏。
提前致谢。
public void Initialize(string SourceConnStr, string DestConnStr)
{
SqlConnection src = null;
SqlConnection dest = null;
try
{
src = new SqlConnection(SourceConnStr);
dest = new SqlConnection(DestConnStr);
DbSyncScopeDescription scope = new DbSyncScopeDescription("SyncScopeDB");
foreach (string tableName in tablesNames)
{
DbSyncTableDescription table = SqlSyncDescriptionBuilder.GetDescriptionForTable(tableName, dest);
scope.Tables.Add(table);
}
SqlSyncScopeProvisioning srcProv = new SqlSyncScopeProvisioning(src, scope);
srcProv.ObjectSchema = "SyncDB1";
srcProv.Apply();
SqlSyncScopeProvisioning destProv = new SqlSyncScopeProvisioning(dest, scope);
destProv.ObjectSchema = "SyncDB2";
destProv.Apply();
}
catch (Exception ex) { Console.Write(ex.Message); }
}
public string Sync(string SourceConnStr, string DestConnStr)
{
SqlConnection src = null;
SqlConnection dest = null;
SampleSyncOrchestrator Orch = null;
try
{
src = new SqlConnection(SourceConnStr);
dest = new SqlConnection(DestConnStr);
Orch = new SampleSyncOrchestrator(
new SqlSyncProvider("SyncScopeDB", src, null, "SyncDB1"),
new SqlSyncProvider("SyncScopeDB", dest, null, "SyncDB2"));
var syncStats = Orch.Synchronize();
Console.Write(syncStats.ToString());
}
catch (Exception ex) { return ex.Message; }
return "Success";
}
public class SampleSyncOrchestrator : SyncOrchestrator
{
public SampleSyncOrchestrator(RelationalSyncProvider local, RelationalSyncProvider remote)
{
this.LocalProvider = local;
this.RemoteProvider = remote;
this.Direction = SyncDirectionOrder.Upload;
}
}