在Perl中解析大型XML文档的时间

时间:2014-04-10 01:47:31

标签: xml perl parsing fork

我有一个包含大约150万行的大型XML文件。 该文件的基本框架是

<org>
   <dept>
      <emp> ... </emp>
      <emp> ... </emp>
      ...
   </dept>
</org> 

每个<emp>节点甚至可以拥有高达.8百万行

我需要解析并将所有数据保存在哈希值中。

我尝试过使用XML::Simple(我不允许使用其他模块,例如XML::TwigXML::libXML)。

问题是解析整个文件大约需要5.5分钟。我需要把它降低到30秒。

我尝试将其拆分为多个文件,每个文件包含一个<emp> .. </emp>部分。例如,我有大约100个文件。

然后我使用fork并使用100个子进程来解析每个文件。

我将总时间减少到大约1.5分钟,但我还没有找到一些方法将数据从子进程传回给父进程。

1 个答案:

答案 0 :(得分:0)

最明显的解决方案是使用专为此目的而设计的XML::Twig。它允许您声明在规定的XML元素关闭时调用的回调子例程,并且不会尝试将完整的结构读入内存。

如果没有适当的数据样本,我无法继续提供帮助,但您似乎会为deptemp元素声明回调。