如何为合并文件获得更高的性能

本文关键字:性能 合并 文件 | 更新日期: 2023-09-27 18:12:00

我有500个csv文件,大小约为10~20M。

对于示例

,文件中的内容如下↓

file1:

column1 column2 column3 column4 .... column50

file2:

column51 column52 ... ... column100

那么,我要做的是将所有文件合并到一个大文件中,如下所示↓

fileAll

column1 , column2 ......  column2500 

我现在的解是

1, Merge per 100 files into  5 large files
2, Merge 5 large files into one large file

但是性能很差。

那么,谁能给我一些提高性能的建议呢?

谢谢!

如何为合并文件获得更高的性能

你是用什么语言工作的?在我的脑海里,我认为你会通过逐行流获得最佳性能。

例如,读取所有文件的第一行,将合并的第一行写出来。继续,直到完成。

这比您的解决方案更好的原因是您的解决方案需要多次从磁盘读写相同的数据,这很慢。我假设您无法在内存中容纳所有文件(无论如何您也不希望这样做,缓存将是可怕的),但是您希望最小化磁盘读写(最慢的操作),并尝试以一种方式进行操作,即每个要写入的每个段都可以放入缓存中。

总之,根据您使用的语言,您可能会在连接字符串时遭受巨大的打击。使用以空结束的数组作为字符串实现的语言在连接大字符串时会受到很大的打击因为它需要搜索空结束符。Python是我马上想到的一个例子。所以你可能想要限制你使用的字符串的大小。在上面的例子中,读入x个字符,输出x个字符。但是,如果可能的话,您仍然应该只读入一次数据,并将数据写出来一次。

您可以尝试将其作为流式操作;不要做1。加载文件1、2。加载文件2,3。合并,4。写的结果。而是做1。文件1的负载线1 &2、2。合并线,3。写一行。通过这种方式,您可以通过执行较小的读、处理、写块来加快速度,从而允许磁盘在进行每行(行)合并时清空其读/写缓冲区。可能还有其他事情拖慢了你的进程。请提供邮政编码。例如,如果不小心操作,字符串操作很容易减慢速度。最后,发布模式(相对于调试模式)更加优化,通常会运行得更快。