gpt4 book ai didi

c# - 将 1500 万条记录复制到新表/服务器

转载 作者:行者123 更新时间:2023-11-29 18:49:35 24 4
gpt4 key购买 nike

美好的一天。我需要将 1500 万条记录从一个 MySQL 表移动到其他架构上的新表。这是一个实时系统,时间是一个问题。我需要移动的表是历史表,对于日常业务并不重要。我不能离开 table ,因为这是我正在进行的更大升级的一部分。

我尝试在测试环境中使用基本 sql 移动数据,但这不起作用; 20 分钟后服务器将我踢出。

移动数据的最佳方式是什么?

如果有人有编码解决方案,我就是 C# 程序员

最佳答案

嗯,了解如何将两者联系起来很重要。它们驻留在单个 MSSQL 实例中还是不同的?因为您似乎尝试将整个历史记录下载到应用程序的内存中......

无论哪种方式,您始终可以批量移动数据。例如,您可以在 Entity Framework 中执行此操作,如下所示:

using(var src = new MyFirstContext())
using(var tr = src.DataBase.BeginTransaction(IsolationLevel.ReadUncommited)) //this will speed up read of history
{
int i = 0;
const int batchSize = 100000;
try
{
while(true)
{
var batch = src.History.AsNoTracking().Skip(i*batchSize).Take(batchSize).ToList();
if(!batch.Any())
{
break;
}
using(var dst = new MySecondContext())
{
dst.Configuration.AutoDetectChangesEnabled = false;
foreach(var ent1 in batch)
{
var ent2 = Map(ent1); //here you can perform map of one history type of row to another.
dst.Set<HistoryRowFromSecondDatabase>().Add(ent2);
}
dst.SaveChanges();
}
i++;
}
}
finally
{
//this is really helpful scope in case of exception.
//save variable 'i', so you can start from the point you left last time.
//Because by default your data is commited under ReadCommited transaction, it is pretty safe to rely only on
//single 'i' variable. Even if you add some new data in source table.
}
}

我还没有测试过这个,但我想你已经明白了。

关于c# - 将 1500 万条记录复制到新表/服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44420252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com