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

本文关键字:csv CSV 大型 oracle 替换 数据库 读取 | 更新日期: 2023-09-27 18:35:51

我有大型csv文件(从2GB到25GB),它们是不同的结构。我制作了一个 c# 应用程序,用户可以在其中输入他要替换的列的位置。现在我必须读取 csv,将 csv 中的列与存储在 oracle db 表中的列进行比较,如果满足选择条件,则替换 csv 中的列,并将结果存储在新的 csv 中。

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

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

谢谢你的建议。

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

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

如果您能够在不遍历所有行的情况下检测到行号,则可以尝试使用MemoryMappedFiles(如果流支持查找,也可以使用流)

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

即使在相当大的文件上,这也与一些迭代收敛。