性能:很多查询或大量处理?

时间:2014-09-15 09:53:53

标签: c# mysql sql sql-server database

目前我正在创建一个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有限,最聪明的选择是什么?

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

1 个答案:

答案 0 :(得分:0)

如果您可以使用SQL Server,这似乎是一个直接适合SQL Server Integration Services的工作。您可以考虑使用该工具而不是构建自己的工具。这取决于您的确切业务需求,但通常这样的数据合并将是批处理/无人值守或基于工具的操作吗?

您可能能够将其编码为比SSIS更快的运行速度,但我只是试一试,看看它是否适合您,并节省自定义开发的成本。