【问题标题】:PHP working with XMLReader with HUGE data sourcePHP 使用具有巨大数据源的 XMLReader
【发布时间】:2013-01-27 03:42:59
【问题描述】:

我需要解析一个庞大的数据源(1490 万行 XML,1.7GB)。

我在使用 XMLReader 执行此操作时遇到问题。除了 SimpleXML,我之前什么都不需要,但考虑到我真的无法将这个巨大的东西加载到内存中,我需要通过流来执行此操作。

我已经写了这段代码:

<?php

$xml = new XMLReader(); 
$xml->open('public.xml'); 


while($xml->read())
{
    echo '.';
}
$xml->close();
?>

但我在执行方面遇到了问题。即,我得到“致命错误:超过 30 秒的最大执行时间......”

当我执行 set_time_limit(600) 时,浏览器就会崩溃。

它崩溃是因为它无法处理 "." 的数量。创建?

你在这里推荐什么?最终,我需要将此 XML 文件导入到关系数据库中。在进入架构细节之前,我正在测试可行性。

【问题讨论】:

  • 您可以将时间限制设置为 0,并将内存限制设置为非常高,但如果格式可预测,我可能会使用自己的解析器进行类似的操作。

标签: php xml xmlreader


【解决方案1】:

您还应该扩展 PHP 的内存限制。

【讨论】:

    【解决方案2】:

    它崩溃是因为它无法处理 "." 的数量。创建?

    要对此进行测试,只需尝试不使用echo '.';
    由于您需要大量 RAM 来增加脚本可以使用的最大内存。 最终将 XML 文件拆分为更小的部分并按顺序处理它们。

    最终看看:

    【讨论】:

    • 优秀的答案汤姆。我想添加另一种选择,即将 XML 数据拆分为对同一脚本的多个 AJAX 调用,并添加一些 post 或 get 数据,指示它当前正在处理的行或元素偏移量以及要处理的数据量每次调用,因此读者可以“跳过”前面。只需在 success 函数上添加一些递归函数调用即可。
    猜你喜欢
    • 2011-03-24
    • 2013-07-24
    • 1970-01-01
    • 2016-12-22
    • 2017-09-30
    • 2015-01-05
    • 2012-03-07
    • 2015-01-10
    相关资源
    最近更新 更多