导出大量数据和内存问题

Posted

技术标签:

【中文标题】导出大量数据和内存问题【英文标题】:Exporting large quantities of data and memory issues 【发布时间】:2013-12-13 03:57:33 【问题描述】:

我没有具体问题。我想听听有关记忆问题的想法和技巧。

假设我有:

产品表上有 100 000 个产品 产品名称表中有 100 000 个产品名称 产品描述表上有 100 000 个产品描述 产品图片表上有200 000张产品图片

我想将这些导出到 Excel 文件。我怎样才能在普通服务器中做到这一点。

我应该查询所有产品和连接的表还是使用限制和偏移量并像 50 000 一样一次?

我是否应该每隔一段时间循环一次mysql结果并将数据保存到一个文件中,然后在最后合并它们?

我应该创建多个较小的 excel 文件并在最后合并它们吗?

所以真正的问题是您使用什么技术来防止内存问题与太大的 mysql 结果、太大的变量大小(将整个 mysql 数据保存到数组)、太大的 excel 变量数据(创建一个巨大的 excel 与创建多个小的并将它们组合起来)。

PS。这些想法不一定与我给你的 excel 示例有关。我想学习如何处理大量数据。

【问题讨论】:

这首先取决于您是要创建一个真正的 Excel BIFF (.xls) 还是 OfficeOpenXML (.xlsx) 文件,或者是一个简单的逗号分隔值 (csv) 文件。足以满足您的需求:如果是后者,那么您在从数据库中读取结果时写入每一行,而不是在内存中构建任何大型数组 【参考方案1】:

在您的 phpmyadmin config.inc.php 顶部插入这些行

ini_set('memory_limit','512M'); // set memory to match your available RAM.
set_time_limit(0); // unlimit script time to run

打开浏览器,运行导出到 excel。离开浏览器,直到完成。

如果您想要自定义报告,则只需查询所有数据(如果您的 RAM 剩余空间很大,那没问题。)然后按照您的要求进行报告。在运行之前在代码顶部插入以上行。

【讨论】:

我正在寻找一种使用不同技术解决内存问题的方法。我认为最糟糕的方法是不断做错事,只是为了增加内存限制。

以上是关于导出大量数据和内存问题的主要内容,如果未能解决你的问题,请参考以下文章

PHPExcel导出大量数据超时及内存错误解决方法(转)

PHP导出大量数据到csv表

求java导出大量数据到excel解决方法

POI之SXSSFWorkbook大量数据导出至excel

php怎么导出大量数据的Excel

你好,java 向数据库添加大量数据时内存溢出 在不改变内存的情况下如何解决? 你当时是怎么解决的