加载大型xml文件的快速方法?

时间:2014-07-07 02:30:51

标签: java xml lucene

我有一大堆xml文件(约20,000个文件)。当我加载整个语料库时,加载每个文档大约需要1秒钟。 xmls非常大。 (> 10,000行)。每个xml代表一个文档,其中包含句子,句子中的标记和其他类似属性的节点。

我在java中使用DocumentBuilder来加载xml。加载xml后,我还需要提取一些相关的xml节点(大约100个句子)。为此,我使用了getElementsByTagName()。

有没有更快的方法在java中加载xml文档?

1 个答案:

答案 0 :(得分:0)

您可以考虑使用SAX。根据此链接,SAX的速度通常会快2到5倍:http://dublintech.blogspot.be/2011/12/jaxb-sax-dom-performance.html。当你只需要实际处理文档的一部分而不是所有内容时,这很有意义。

您还可以使用速度更快的磁盘(如SSD)或带有缓存策略的虚拟文件系统。

如果你的磁盘速度很慢,将它们全部拉成一个大拉链甚至是有意义的,这会使磁盘访问量减少80%到90%。解压缩开销应该被磁盘访问性能的增益所抵消。

但是说你也在考虑Lucene实际上意味着我们错过了一些关于你的用例的关键信息,因为它暗示你所优化的行为或多或少都是“一次性”。

如果您确实只需要文档内容的一小部分,您还可以考虑将该信息存储在一个数据结构中并对其进行序列化。这样,您只需要反序列化一个文件而不需要处理20.000个XML文档。如果文档发生更改,您还可以存储文档路径和MD5之类的哈希码来检测已修改的文档。