【发布时间】:2014-04-10 01:47:30
【问题描述】:
我有一个包含大约 150 万行的大型 XML 文件。 文件的基本骨架是
<org>
<dept>
<emp> ... </emp>
<emp> ... </emp>
...
</dept>
</org>
每个<emp> 节点甚至可以有多达80 万行
我需要解析整个数据并将其保存在哈希中。
我尝试过使用XML::Simple(我不允许使用其他模块,例如XML::Twig 或XML::libXML)。
问题在于解析整个文件大约需要 5.5 分钟。我需要将它降低到 30 秒左右。
我尝试将其拆分为多个文件,每个文件包含一个 <emp> .. </emp> 部分。例如,我有大约 100 个文件。
然后我使用fork 并使用 100 个子进程来解析每个文件。
我将总时间减少到 1.5 分钟左右,但我还没有找到一些方法将数据从子进程传回父进程。
【问题讨论】:
-
我必须用
XML做一次,到目前为止最快的方法是使用XML::LibXML,它是CPAN,但是由于依赖关系可能或应该已经安装的那些模块之一。 -
什么是“多达80万行”?您的意思是“少于 800,000 行”吗?
-
请解释一下“我需要解析并保存hash ref中的全部数据”。这是一个非常具体的要求,几乎可以肯定是不必要的
-
是的..我的意思是每个
<emp>节点可以包含大约 800,000 行。 -
没有理由将所有可能被访问的东西都保存在内存中。例如,谷歌在四分之一秒内返回了我对
Chosera stone的查询,我确信它不会在内存中保留所有互联网的索引。任何指示你瞄准 30 秒的人都应该被枪杀,因为你的目标是一个我怀疑无法实现的荒谬理想