gpt4 book ai didi

php - 更好的性能 - MySQL 临时表或直接读取 CSV 文件或其他什么?

转载 作者:行者123 更新时间:2023-11-29 17:15:12 25 4
gpt4 key购买 nike

我每天都会收到一个包含 25 万行和 40 列的源 csv 文件。是290MB。我需要对其进行过滤,因为它的行数和列数都超出了我的需要。

对于满足过滤条件的每一行,我们希望使用 PHP API 将其更新到目标系统,一次 1 条记录。

在 API 调用(读取/过滤/加载)之前,为了获得最快的性能,最好的方法是什么?

  1. 遍历文件的每一行,确定这是否是我想要的行,仅获取我需要的列,然后将其传递给 API?

  2. 使用 LOAD DATA INFILE 将所有记录加载到临时 MySQL 表中。然后查询表中我想要的行和字段,并迭代结果集,将每条记录传递给 API?

有更好的选择吗?

谢谢!

最佳答案

我需要首先做出假设,250K 行中的大部分将进入数据库。如果只有很小的百分比,那么迭代文件并批量发送所有行肯定会更快。

不同的配置可能会影响这两种方法,但一般来说,第二种方法性能更好,脚本编写工作更少。

方法 1:最糟糕的是将每一行发送到服务器。更多的往返和更多的小提交。

这里可以改进的是批量发送行,也许一起发送数百行。您会看到更好的结果。

方法 2:由于 ACID 的所有开销和复杂性,MyISAM 将比 InnoDB 更快。如果您可以接受MyISAM,请先尝试一下。

对于InnoDB,有更好的方法3(实际上是方法1和方法2的混合)。因为InnoDB不做表锁,所以你可以尝试同时导入多个文件,即将CSV文件分成多个文件,然后从脚本中执行加载数据。不要先将 auto_increment key 添加到表中,以避免 auto_inc 锁。

关于php - 更好的性能 - MySQL 临时表或直接读取 CSV 文件或其他什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51682216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com