优化巨大的文件CSV处理

时间:2018-02-21 09:59:08

标签: php node.js

我知道这个问题可能过于宽泛,但我需要找到一种方法来优化对包含10 000行的CSV文件的处理。

必须解析每一行,在每一行,我都需要调用Google API并进行计算,然后我需要编写带有新信息的CSV文件。

现在,我正在使用PHP,处理大约需要半小时。

有没有办法优化这个?我想过使用NodeJS来并行处理行?

3 个答案:

答案 0 :(得分:0)

您可以使用curl_multi_select对Google API请求进行并行处理。 - 将输入加载到队列中,并行运行查询,写入输出并在结果完成时加载更多。类似TCP Sliding Window算法的东西。

或者,您可以将所有数据加载到(SQLite)数据库(10 000行不多),然后并行运行计算。数据库比创建滑动窗口更容易实现。

我不认为NodeJS会快得多。当然不值得重写现有的代码。

答案 1 :(得分:0)

您可以通过检查读取10K行所需的时间并使用一些随机的额外列或额外信息来更新它们来调试代码。这将让您了解读取和写入具有10K行的CSV所需的时间。我相信这不会花很长时间。

google api电话可能是罪魁祸首。如果您知道node.js这是一个不错的选择,但如果这太麻烦了,您可以使用php curl一次发送多个请求,而无需等待每个请求的响应。这可能有助于加快这一进程。您可以参考此网站了解更多信息http://bytes.schibsted.com/php-perform-requests-in-parallel/

答案 2 :(得分:0)

10,000行应该没问题,但在Python 3.6中打开时,请确保使用readlines并一次读取所有内容。使用csv阅读器还应该有助于解决任何分隔符问题并引用诸如'"'等字符。我一直在阅读130万行,这不是问题。我的处理时间大约需要6-8分钟,所以你应该只需几秒钟。

你使用的机器有足够的内存吗?如果您使用的是覆盆子pi,小型虚拟机或非常旧的笔记本电脑,我可以想象这会大大妨碍您的处理时间。否则,你应该对python没有任何问题。