gpt4 book ai didi

php - 使用php在mysql中加载没有文件的数据infile

转载 作者:行者123 更新时间:2023-11-29 06:30:39 25 4
gpt4 key购买 nike

我每 30 秒以流方式接收一次文件。这些文件最多可以有 40 列和 50,000 行。这些文件是 txt 文件和制表符分隔。现在,我正在临时保存文件,使用 load data infile 将内容保存到数据库中的临时表,然后删除文件。

我想避免保存和删除过程,而是将数据直接保存到数据库中。流是此处的 $output:

protected function run(OutputInterface $output)
{
$this->readInventoryReport($this->interaction($output));
}

我一直在谷歌搜索,试图找到“性能是一个大问题”——对此的证明答案,但如果不将数据保存到文件并使用加载数据文件。我需要让内容快速可用,并在将它们保存到临时表后使用它们。 (用内容更新其他表...)

是否有处理此问题的好方法,或者文件保存和删除方法以及加载数据 infile 是否会比其他解决方案更好?

我运行它的服务器有 SSD 和 32GB 内存。

最佳答案

LOAD DATA INFILE是将大量数据低延迟地摄取到 MySQL 中的最快方法。

您可以自己编写一个 php 程序,使用准备好的语句等,可以很好地将行插入到您的数据库中。如果你安排做一个COMMIT每几百行,并使用准备好的语句,并仔细编写代码,它会相当快,但不如 LOAD DATA INFILE 快.为什么?必须将单独的行操作序列化到网络线路上,然后反序列化,并一次处理一个(或两个或十个)。 LOAD DATA只是在本地收集你的数据。

听起来你有一台不错的 MySQL 服务器机器。但序列化仍然是一个瓶颈。

每 30 秒 50K 记录,嗯?好多啊!这些数据有没有多余的?也就是说,后一批数据中的任何行是否会覆盖前一批数据中的行?如果是这样,您也许能够编写一个程序来跳过已过时的行。

关于php - 使用php在mysql中加载没有文件的数据infile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28119928/

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