Mar*_* K. 11 java xml parallel-processing multithreading xml-parsing
我正在编写一个应用程序来处理大量具有深度节点结构的xml文件(> 1000).使用woodstox(Event API)大约需要6秒来解析具有22.000个节点的文件.
该算法被置于具有用户交互的过程中,其中只有几秒的响应时间是可接受的.所以我需要改进如何处理xml文件的策略.
现在我正在考虑一个多线程解决方案(在16核+硬件上可以更好地扩展).我想到了以下国家:
我想同时提高,整体性能和"每个文件"的表现.
你有这方面的经验吗?什么是最好的方式?
这很明显:只需创建几个解析器并在多个线程中并行运行它们即可。
看看Woodstox 性能(目前已关闭,请尝试谷歌缓存)。
如果 XML 的结构是可预测的:如果它具有许多相同的顶级元素,则可以完成此操作。例如:
<element>
    <more>more elements</more>
</element> 
<element>
    <other>other elements</other>
</element>
在这种情况下,您可以创建简单的拆分器来搜索<element>此部分并将其提供给特定的解析器实例。这是一种简化的方法:在现实生活中,我会使用 RandomAccessFile 来查找起始停止点 ( <element>),然后创建仅对文件的一部分进行操作的自定义 FileInputStream。
看看阿尔托。创造伍德斯托克斯的人也是同一个人。这是该领域的专家 - 不要重新发明轮子。