在 mysql 和 php 中加载没有文件的数据 infile

load data infile without file in mysql with php

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

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

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

我一直在谷歌搜索,试图找到一个 "performance is a big issue" - 证明答案,但如果不将数据保存到文件并使用,我找不到好的方法加载数据文件。我需要让内容快速可用,并在将它们保存到临时 table 后使用它们。 (用内容更新其他 tables...)

有没有什么好的方法来处理这个问题,或者文件保存和删除方法结合加载数据 infile 是否会比其他解决方案更好?

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

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

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

听起来你有一台不错的 MySQL 服务器机器。但是连载还是瓶颈

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