gpt4 book ai didi

php - 在 PHP 中解析 BIG XML

转载 作者:行者123 更新时间:2023-11-29 07:01:04 25 4
gpt4 key购买 nike

我需要解析一个很大的 XML。 f.ex 100mb(可能更多)。

例如:Xml 看起来像这样:

<notes>
<note>
<id>cdsds32da435-wufdhah</id>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>


x 1000000 different notes(or even more)

</notes>

每个笔记都有唯一的 ID。当我解析 XML 时,我需要首先查找数据库中是否存在特定 ID 的注释,如果不存在则插入它。

问题出在性能上(需要 2 小时)。我尝试使用一个 SELECT 从数据库中获取所有 ID(但也很大),所以我不会每次都询问数据库,我将它们放在 PHP 数组(内存)中。

$sql = "SELECT id FROM 'notes'";
...
$ids = Array with all ids

我还在循环中使用 xml_parser 解析了一个 XML:

while($data = fread($Xml, '512')) {
xml_parse($xmlParser, $data);
}

我认为使用 simple_xml_parser 解析 XML 可能会生成一个太大的变量,PHP 无法处理它。

当我有一个笔记 ID 时,我会检查它是否存在于 $ids 中:

if (array_search($note->id, $ids) === FALSE) {
//than insert it
}

但是时间太长了。所以我发现 PHP 带有特殊的数组,称为 Juddy Arrays http://php.net/manual/en/book.judy.php但我不确切知道它们是否用于此 - 我的意思是用于快速解析大数组。

我也考虑使用 Memcached,将来自 DB 的 ID 存储在许多变量中,但我想找到一个合适的解决方案。

在数据库表中也有索引,以加快这个过程。 XML 每周都在增长 :) 并且它每次都包含来自上一个 XML 的所有注释以及新注释。

问题?如何在 PHP 中快速解析大数组? Judy Arrays 适合这个吗?将数据库中的所有 ID 存储在一个变量中是一个很好的解决方案吗? - 一次对于 PHP 来说可能太大了。

最佳答案

当我解析 DMOZ database 时(2G xml) 我一直在用Java解决方案(SAX解析器)。首先,我需要将大量数据从 XML(RDF 格式)传输到 MySQL 数据库中。我的 PHP 解决方案执行此任务超过 6 个小时。但是 Java 解决方案在 15 分钟后完成了类似的任务。所以我可以告诉你:尝试使用基于SAX解析器的Java解决方案。

关于php - 在 PHP 中解析 BIG XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10101498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com