我有一个包含大约150万行的大型XML文件。 该文件的基本框架是
<org>
<dept>
<emp> ... </emp>
<emp> ... </emp>
...
</dept>
</org>
每个<emp>
节点甚至可以拥有高达.8百万行
我需要解析并将所有数据保存在哈希值中。
我尝试过使用XML::Simple
(我不允许使用其他模块,例如XML::Twig
或XML::libXML
)。
问题是解析整个文件大约需要5.5分钟。我需要把它降低到30秒。
我尝试将其拆分为多个文件,每个文件包含一个<emp> .. </emp>
部分。例如,我有大约100个文件。
然后我使用fork
并使用100个子进程来解析每个文件。
我将总时间减少到大约1.5分钟,但我还没有找到一些方法将数据从子进程传回给父进程。
答案 0 :(得分:0)
最明显的解决方案是使用专为此目的而设计的XML::Twig
。它允许您声明在规定的XML元素关闭时调用的回调子例程,并且不会尝试将完整的结构读入内存。
如果没有适当的数据样本,我无法继续提供帮助,但您似乎会为dept
和emp
元素声明回调。