在 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 条记录,嗯?好多啊!这些数据有没有多余的?也就是说,后一批数据中的任何行是否会覆盖前一批数据中的行?如果是这样,您也许可以编写一个程序来跳过已过时的行。
我每 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 条记录,嗯?好多啊!这些数据有没有多余的?也就是说,后一批数据中的任何行是否会覆盖前一批数据中的行?如果是这样,您也许可以编写一个程序来跳过已过时的行。