我有一个报告页面,处理数据库表中的约 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。您可能还想添加一些清理后记。
关于php - 使用 PHP/Drupal 处理大型数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2477181/