dongmimeng5500
2018-06-13 03:40
浏览 91
已采纳

PHP / Symfony:写入CSV大文件

Thank you for helping.

My Spec:

  1. I have a very large CSV file
  2. I need to process the file and output another large CSV file

My environment:

  1. php7.0
  2. Symfony 3.4 framework

My current solution:

I am using Symfony Serializer component to read my file, I then process my file and output the file. All in memory. Operation takes around 20 minutes to complete.

I run the script from a Symfony command. I have a service to read the file and a service to export the file.

An improved solution 1:

  1. I can load the CSV file into a database table like explained here, with "LOAD DATA LOCAL INFILE" sql query. Very fast operation
  2. I can then process my data and save it to another table
  3. Then I would use "SELECT ... INTO OUTFILE 'file_name'" to output the file

Advantage: -SQL centered - No memory problem

Disavantage: -DB operations during processing might be expensive

An improved solution 2:

  1. I can read the CSV file line by line
  2. I process the line
  3. I write the line to the output file

Adv: No memory issue Disav: Could take a LOT of time.

An improved solution 3:

  1. I can load the CSV file into a database table like explained here, with "LOAD DATA LOCAL INFILE" sql query. Very fast operation
  2. I can then process my data in chunks of 1000 and write them to a file

What solution would you use? Or do you have any better solution?

图片转代码服务由CSDN问答提供 功能建议

感谢您的帮助。

我的规范:

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

    我的环境:

    1. php7.0
    2. Symfony 3.4框架

      我当前的解决方案:

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

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

      改进的解决方案1:

      1. 我可以将CSV文件加载到数据库表中 通过“LOAD DATA LOCAL”解释此处 INFILE“sql查询。 非常快速的操作
      2. 然后我可以处理我的数据并将其保存到另一个表中
      3. 然后我将使用“SELECT ... INTO OUTFILE'file_name'”来输出 文件

        优势: -SQL居中 -无内存问题

        无效: -DB操作 处理过程中可能很昂贵

        改进的解决方案2:

        1. 我可以读取CSV文件 逐行
        2. 我处理行
        3. 我将该行写入输出文件

          高级:没有内存问题 Disav:可能需要很长时间。

          改进的解决方案3:

            \ n
          1. 我可以将CSV文件加载到数据库表中,如解释 here ,带有”LOAD DATA LOCAL INFILE“sql查询。 非常快速的操作
          2. 然后我可以用1000块的数据处理我的数据并将它们写入文件

            你会使用什么解决方案 ? 或者你有更好的解决方案吗?

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题