读取大型CSV,从oracle db中替换一些列值并编写新的csv

时间:2016-02-23 07:23:30

标签: c# oracle parsing csv

我有大型csv文件(从2GB到25GB),它们是不同的结构。我已经制作了一个c#app,用户输入了他想要替换的列的位置。现在我必须读取csv,将csv中的列与存储在oracle db table中的列进行比较,如果满足select conditon,则替换csv中的列,并将结果存储在新的csv中。

现在问题是:最好和最快的方法是什么?访问数据库只有一次进行列比较的select语句而不是每个csv行的最佳方法是什么?

现在我已经使用StreamReader读取然后拆分csv行,但我不知道将它与db中的值进行比较的最佳方法是什么?

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

StreamReader是一种简单的方法,也可能不那么快。

如果您能够在不迭代所有行的情况下检测到行号,您可以尝试使用MemoryMappedFiles(如果它们支持搜索,也可以使用流)

然后跳到文件的中间并检查您是否在所需行的上方或下方。 然后跳到剩下的一半的中间(如果命中值高于上限,则上限为低于/低)并重复。

即使在非常大的文件上也会收敛一些迭代。