【发布时间】:2019-07-17 12:15:54
【问题描述】:
我有一个场景:我需要比较两个数据库之间的 350 个表。所以我们遵循的程序是:
1.在sql中创建350张临时表 2.从数据库中插入数据 3.最后比较每个临时表,找出差异。
在这种方法中: 我们正在使用一个等待到第 1 步结束的线程。 然后下一个线程将等到 2 结束。
所以它花费了太多时间。有什么方法可以做,比如创建一个表加载数据,并行创建第二个并加载,就像不等到最后一样。
更新:这是我的示例代码:
foreach (var bpr in tableDetails)
{
var tableName = bpr.TableName;
ComparisonDataLoadLoadWorkerID(comparisonID, sourceEnvId, targetEnvId, tableName);//creating table and loading from DBs
}
这里遍历每个表并创建和加载数据。加载完整表数据后进行比较。所以我需要等到上面的foreach结束。我期待的是,如果第一个表正在创建加载数据,并且应该同时创建第二个表和数据加载。所以不需要等到每个表加载结束。 提前感谢您的帮助。
【问题讨论】:
-
如果你能给我们看一些代码就太好了。
-
1.你会比较结构相同的表中的数据吗?2.为什么需要临时表?避免锁定表?3.在这里给出一点上下文:你为什么需要这个? -
部分DBMS能够快速创建snapshots。如果你能做到这一点,那么就不需要复制表:只需制作一个快照,然后比较快照中的表。
-
@mtkachenko:感谢您的回复。仅比较具有相同结构的表中的数据。我们正在从源和目标中获取数据,并插入到临时表中进行比较。比较后,如果没有变化,将检测到变化并插入另一个数据库。
标签: c# sql multithreading parallel-processing