PHP / Symfony:写入CSV大文件

时间:2018-06-13 03:40:50

标签: php symfony csv

感谢您的帮助。

我的规格:

  1. 我有一个非常大的CSV文件
  2. 我需要处理文件并输出另一个大型CSV文件
  3. 我的环境:

    1. php7.0
    2. Symfony 3.4框架
    3. 我目前的解决方案:

      我正在使用Symfony Serializer组件来读取我的文件,然后处理我的文件并输出文件。一切都在记忆中。操作大约需要20分钟才能完成。

      我从Symfony命令运行脚本。我有一个服务来读取文件和服务来导出文件。

      改进的解决方案1:

      1. 我可以将CSV文件加载到数据库表中,如解释here,使用" LOAD DATA LOCAL INFILE" SQL查询。操作非常快
      2. 然后我可以处理我的数据并将其保存到另一个表
      3. 然后我会使用" SELECT ... INTO OUTFILE' file_name'"输出文件
      4. 优势: -SQL居中 - 没有记忆问题

        Disavantage: 处理期间的-DB操作可能很昂贵

        改进的解决方案2:

        1. 我可以逐行阅读CSV文件
        2. 我处理
        3. 我将该行写入输出文件
        4. 高级:没有内存问题 否认:可能需要很多时间。

          改进的解决方案3:

          1. 我可以将CSV文件加载到数据库表中,如解释here,使用" LOAD DATA LOCAL INFILE" SQL查询。操作非常快
          2. 然后我可以用1000块的数据处理我的数据并将它们写入文件
          3. 您会使用什么解决方案?或者你有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

解决方案2,没有数据库。从csv读取,处理并输出到csv,就像评论中提到的人一样,使用fgetcsv()fputcsv()。逐行进行应该几乎不消耗任何内存,它将消除对数据库的需求。这些类型的操作的问题是将csv文件作为流读取的顺序性质,最终过程的速度将归结为读取和写入操作之间的数据操作的速度。在中间使用数据库只会减慢整个过程,并且有点浪费。