7

我有一个 oracle 数据库,其中存储了大量的生物特征数据,如 HRV 和 ECG。我需要在 excel 表中为每个用户显示这些数据。但是这个数据是如此之大,即使对于单个用户,我们也会获得超过 1,00,000 条记录。目前有100~个用户。

我正在做的是:

  1. 我使用命令行执行 CRON 作业,这是我在 Zend 框架中开发的。
  2. 我确保这个 CRON 不重叠。
  3. 我从 oracle 数据库中为每个用户一一获取所有数据,然后将其存储在一个数组中。
  4. 当我获取所有用户的数据时,我正在使用phpexcel库生成 excel 表。

    Excel表的结构

    • uid 1/uid/2 uid/3 ----------- 第 n 个
    • 数据 |数据 |数据 |
    • 数据 |数据 |数据 |
    • |
    • 第n个

问题 :

PHP 占用 1.5 GB 的 RAM 并将数据存储在数组中并将其发送到与 phpexcel 交互的函数,但这个库需要 3-4 小时,然后我得到“致命:内存限制”错误。我的系统只有 2 GB RAM。

我应该采取哪些步骤来优化我的代码以处理这种大小的数据并以 excel 格式显示相同的信息,或者我需要增加 RAM?

4

2 回答 2

7

考虑仅使用 PHP 来排除某种包含结果数据的 Excel 可读分隔文件 (CSV)。(这个想法是您不会通过 PHP 写入 Excel ——因为您遇到的限制)。

您可以通过类似 Powershell 的方式请求 php 生成的文件,然后让 Powershell 或其他脚本选项将 csv 文件直接打开到 Excel 中,然后另存为 xlsx。

或者您可以让您的命令行 php 执行“系统”调用并执行脚本步骤,将 csv 直接打开到 Excel 中,然后将其保存为 xlsx。

于 2012-12-22T04:33:11.120 回答
2

如果单个用户数据很大,你使用了太多内存来保存这些数据,尝试以批处理模式在excel中写入。它将节省您的内存使用量。

于 2012-12-22T04:34:23.020 回答