如何加快从数据库中保存文件

Posted

技术标签:

【中文标题】如何加快从数据库中保存文件【英文标题】:How to speed up to make save file from database 【发布时间】:2020-08-31 12:27:14 【问题描述】:

我有一个 mysql 数据库。这是一个非常庞大的数据库。当我选择具有 1M 记录的数据时,我应该在磁盘上制作 csv 文件。 我制作 php 脚本。但是它被Linux杀死了。 如何快速制作PHP脚本?

        $batches = $itemcount / 50000; 
        for ($i = 0; $i <= $batches; $i++) 

            $offset = $i * 50000;
            $sql = $sql_org . " LIMIT  $offset, 50000 ";

        $stmt = $db->prepare($sql);


            if($stmt) 
                if($stmt->execute()) 
                     $stmt->bind_result($FIRSTNAME, $LASTNAME, $PHONE....

【问题讨论】:

你确定不是php.net/manual/en/info.configuration.php#ini.max-execution-time 是的。这不是执行时间。我在终端中运行 PHP 脚本。 有1M条记录。所以就发生了内存溢出。 也许以 10,000 个为一组或任何可行的方式执行,每次都附加到 CSV。 使用类似SELECT blah blah FROM foo WHERE what INTO OUTFILE 'file.csv' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LINES TERMINATED BY '\r\n';的东西你不需要PHP。 【参考方案1】:

安装mysql客户端和piping out the output

shell_exec('mysql -u username -p "password" --database=dbname --host=AWShostname --port=AWSport --batch 
  -e "select * from `table`" 
  | sed #s/\t/","/g;s/^/"/;s/$/"/;s/\n//g# > /path/to/yourlocalfilename.csv')

注意:从 AWS 导出大量数据非常昂贵。

【讨论】:

以上是关于如何加快从数据库中保存文件的主要内容,如果未能解决你的问题,请参考以下文章

如何从 csv 文件中获取数据并使用 mysql 保存到 grails 中?

如何保存从Kinect 2.0收集的Body数据并将其保存在JSON文件中?

如何从本地 JSON 文件解析数据并保存在模型类中并在 tableview 中使用

如何将文件保存在路径中并使用 ../../ 从不同的路径 PHP 访问它

如何从 textarea 的值中保存 .txt 文件?

如何从 zip 文件夹中的 csv 文件中读取数据并将 csv 文件中的数据保存在数据库中?