php - 使用 PHP/Drupal 处理大型数据集

标签 php drupal memory-management resultset

我有一个报告页面,处理数据库表中的约 700k 条记录。我可以使用分页来分解结果,将其显示在网页上。但是,我导出到 PDF/CSV 的功能依赖于一次处理整个数据集,并且在大约 250k 行时达到了 256MB 内存限制。

我不愿意增加内存限制,而且我无法使用 MySQL 的保存到输出文件来仅提供预生成的 CSV。但是,我确实看不到使用 Drupal 提供大型数据集的方法,例如:

$form = array();
$table_headers = array();
$table_rows = array();
$data = db_query("a query to get the whole dataset");
while ($row = db_fetch_object($data)) {
    $table_rows[] = $row->some attribute;
}

$form['report'] = array('#value' => theme('table', $table_headers, $table_rows);
return $form;

有没有办法绕过本质上附加到一个巨大的数组数组的问题?目前,我不知道如何使用 Drupal 提供任何有意义的报告页面。

谢谢

最佳答案

对于如此大的数据集,我将使用 Drupal 的 Batch API,它允许将时间密集型操作分成多个批处理。这对用户来说也更好,因为它会给他们一个进度条,并指示操作将花费多长时间。

通过打开一个临时文件来启动批处理操作,然后在每个新批处理中向其中追加新记录,直到完成。最终页面可以进行最终处理,以 cvs 形式提供数据或转换为 PDF。您可能还想添加一些清理后记。

http://api.drupal.org/api/group/batch/6

关于php - 使用 PHP/Drupal 处理大型数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2477181/

相关文章:

c# - 在 WinCE 上运行我的应用程序之前如何分配程序内存和存储空间?

javascript - 在 Javascript 中使用 try-catch-finally block 捕获 JSON 解析异常不起作用

php - 限制哪些类可以扩展另一个类

objective-c - 如何处理由于内存不足导致页面卸载的情况

ios - 如何在swift中取消初始化类对象?

drupal - 将drupal View 设置为随机页码

php - 更改浏览器选项卡状态

php - 教义持久化和刷新导致 Symfony 中的重复记录

Drupal 8 添加 javascript 并在带有自定义模块的钩子(Hook)中传递数据

drupal - Drupal 初学者最常见的陷阱是什么?