目前我正在创建一个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有限,最聪明的选择是什么?
欢迎任何其他建议,当然。
答案 0 :(得分:0)
如果您可以使用SQL Server,这似乎是一个直接适合SQL Server Integration Services的工作。您可以考虑使用该工具而不是构建自己的工具。这取决于您的确切业务需求,但通常这样的数据合并将是批处理/无人值守或基于工具的操作吗?
您可能能够将其编码为比SSIS更快的运行速度,但我只是试一试,看看它是否适合您,并节省自定义开发的成本。