【发布时间】:2011-04-03 20:46:41
【问题描述】:
我有一些文件夹,每天大约有 3000 个新的 csv 文件进入,每个文件包含 50 到 2000 行信息。
目前,有一个流程可以一次提取一个文件,一次提取每一行,然后将其发送到存储过程以将内容插入数据库。
这意味着在一天的过程中,在下一个 3000 个文件进入之前,它可能很难通过 3000 个文件!
我正在寻求改进这个过程并有以下想法
- 使用 C# 4.0 的新并行功能允许一次处理多个文件,仍然逐行传递到存储的过程
- 创建一个新的临时数据库表,文件中的所有行可以一次插入其中,然后对临时表中新添加的行调用存储过程。
- 将进程拆分为 2 个任务。一项工作是将文件中的数据读取到临时数据库表中,另一项工作是处理临时表中的行。
关于我如何看待这样做的任何其他想法?目前每个文件最多可能需要 20 秒,我真的很想大大提高这方面的性能。
【问题讨论】:
-
使用存储过程进行插入真的很重要吗?
-
3000 个文件 x 1000 行平均 = 您向数据库引擎发送 3M 查询,一次一个,并执行 3M 存储过程(通常被解释),一次一个,你问为什么它很慢?跳过所有开销、锁定数据库、删除索引和批量加载。然后重新启用。 TPL 在这里帮不了你,因为瓶颈是数据库引擎。
-
您正在加载数据仓库吗?
标签: c# sql performance import file-processing