繁体   English   中英

使用PHP在MySQL中加载没有文件的数据infile

[英]load data infile without file in mysql with php

我每30秒以流媒体方式接收一次文件。 文件最多可以包含40列和50,000行。 这些文件是txt文件,并且制表符分开。 现在,我正在临时保存文件,将包含装入数据文件的内容保存到数据库中的临时表中,然后再删除文件。

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

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

我一直在搜寻所有“性能是一个大问题”,这是证明性的答案,但是我一直没有找到一种很好的方法来完成此任务,除非将数据保存到文件中并在文件中使用加载数据。 我需要快速提供内容,并将其保存到临时表后再使用这些内容。 (使用内容更新其他表...)

是否有解决此问题的好方法,还是将文件保存和删除方法以及文件中的加载数据比其他解决方案更好?

我正在其上运行的服务器具有SSD和32GB的RAM。

LOAD DATA INFILE是将低吨位数据吞入MySQL的最快方法。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM