gpt4 book ai didi

c# - 性能: Lots of queries or lots of processing?

转载 作者:行者123 更新时间:2023-11-29 23:47:25 25 4
gpt4 key购买 nike

目前我正在创建一个 C# 应用程序,它必须从现有数据库中读取大量数据(超过 2,000,000 条记录),并将其与数据库中不存在的大量其他数据(也大约 2,000,000 条记录)进行比较。这些比较主要是String比较。数据量会变得更大,因此我需要知道哪种解决方案将带来最佳性能。

我已经在网上搜索过,我想出了两种解决方案;

解决方案1

应用程序将执行单个查询(例如,SELECT column_name FROM table_name)并将所有数据存储在 DataTable 中。然后,应用程序会将所有存储的数据与输入进行比较,如果有比较,则会将其写入数据库。

优点:

  • 查询只会执行一次。之后,我可以对所有传入记录多次使用存储的数据。

缺点:

  • 随着数据库变大,我的 RAM 使用量也会变大。目前我必须使用 1GB(我知道,生活很艰难),如果我实际上下载其中数据库的全部内容,恐怕它不适合。

  • 处理所有数据将花费大量时间。

解决方案2

例如,应用程序将为每条记录执行特定查询

SELECT column_name FROM table_name WHERE value_name = value

然后将检查DataTable是否有记录,例如

 if(datatable.Rows.Count>0) { \\etc }

如果有记录,我可以断定有匹配的记录,并且我可以写入数据库。

优点:

  • 由于我只会获取特定数据,因此 RAM 的使用量可能会少很多。
  • 处理速度大大加快。

缺点:

  • 我将不得不执行大量查询。如果您对数字感兴趣,则每条记录可能会进行 5 次左右的查询。如果有 2,000,000 条记录,则需要 10,000,000 次查询。

我的问题是,鉴于我的 RAM 有限,最明智的选择是什么?

当然,也欢迎任何其他建议。

最佳答案

如果您有可用的 SQL Server,那么这似乎是一项直接适合 SQL Server Integration Services 的工作。您可能会考虑使用该工具而不是构建自己的工具。这取决于您的具体业务需求,但一般来说,像这样的数据合并将是批量/无人值守或基于工具的操作?

您也许可以将其编码为比 SSIS 运行得更快,但我会尝试一下,看看您是否可以接受,并节省自定义开发的成本。

关于c# - 性能: Lots of queries or lots of processing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25845292/

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