gpt4 book ai didi

mysql - MVC5中如何提高写入数据库的性能?

转载 作者:行者123 更新时间:2023-11-29 22:59:02 24 4
gpt4 key购买 nike

我有一个 MVC5 应用程序,我正在使用来自 Azure 的 EF6 和 MySQL 数据库服务,即 CleanDB MySQL。我有一个 CSV 阅读器类,它在我的控制台应用程序中运行得非常快。然后,在我的 MVC 应用程序中,我有一个如下所示的模型:

Provider.cs

public class Provider
{
public int ProviderId { get; set; }

public string ProviderName { get; set; }

public string Email { get; set; }

public string Address { get; set; }

public string City { get; set; }

[ForeignKey("State")]
public int StateID { get; set; }

public virtual State State { get; set; }

public string Zip { get; set; }

public string Phone { get; set; }

public string Fax { get; set; }

public string SICCode { get; set; }

public string Description { get; set; }

public string Website { get; set; }

public string RefId { get; set; }
}

然后,在我的 Configuration.cs 文件中,我有这样的内容:

string[] csvs = Directory.GetFiles(@"C:\Users\User\Downloads\db\test\");

foreach (string csv in csvs)
{
using (CsvReader reader = new CsvReader(csv))
{
foreach (string[] values in reader.RowEnumerator)
{
var provider = new Provider();
provider.ProviderName = values[0];
provider.Email = values[1];
provider.Address = values[2];
provider.City = values[3];
provider.StateID = 491;
provider.Zip = values[5];
provider.Phone = values[6];
provider.Fax = values[7];
provider.SICCode = values[8];
provider.Description = values[9];
provider.Website = values[10];
provider.RefId = "";

context.Providers.Add(provider);
}
}
}

context.SaveChanges();

重点是,我有大约 50 个 CSV 文件,总大小为 400MB,总条目数约为 900 万个。出于测试目的,我使用了列表中最小的 CSV 文件,该文件大小为 2MB,包含大约 15k 条目。执行 Update-Database 花费了大约 40 分钟才能将所有这些条目放入数据库中。你可以假设我需要多少时间来处理 900 万个条目。知道如何加快这个过程吗?

最佳答案

您确定这实际上是您的数据库性能的问题吗?通过直到最后才调用 SaveChanges, Entity Framework 在单个事务中对所有内容进行批处理,因此除了传输时间之外,您只需向任何数据库表添加 900 万个条目即可获得标准成本。除了向数据库服务器提供更多资源之外,您对此无能为力,这可能会或可能不会产生影响,具体取决于当前资源的限制程度。即使在最坏的情况下,实际查询的传输时间也不应该超过一秒,除非您的连接是世界上最差的,或者尝试通过拨号或其他方式来执行此操作。

很可能,您最大的性能损失是实际访问文件系统并读取 CSV 文件。我会仔细查看您的 CSVReader,看看是否可以找到性能更高的替代品。另外,我不确定这个库是如何工作的,但如果它从文件系统流式传输文件,最好一次将其全部读入内存(假设您有足够的 RAM)。访问驱动器上的许多小簇通常比读取单个大簇慢。一个非常粗略的类比是将文件复制到 USB 驱动器(因为我们几乎所有人都有过这样的经历)。我相信您已经注意到,复制 4000 个 1KB 文件比复制一个 4 MB 文件花费的时间要长得多,并且只能从那里进行扩展。

关于mysql - MVC5中如何提高写入数据库的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28589821/

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