我正在编写一个处理具有深节点结构的xml文件(> 1000)的应用程序。使用woodstox(事件API)大约需要6秒钟来解析具有22.000个节点的文件。
该算法被置于与用户交互的过程中,其中只有几秒钟的响应时间是可以接受的。因此,我需要改进如何处理xml文件的策略。
现在,我正在考虑一种多线程解决方案(在16个Core +硬件上可更好地扩展)。我想到了以下策略:
我想同时改善整体性能和“每个文件”的性能。
您是否有处理此类问题的经验?最好的方法是什么?
这很明显:只需创建多个解析器,然后在多个线程中并行运行它们即可。
看看Woodstox的性能(此刻请尝试使用Google缓存)。
如果XML的结构是可预测的,则可以做到这一点:如果它具有很多相同的顶级元素。例如:
<element> <more>more elements</more>
other elements
在这种情况下,您可以创建简单的拆分器,<element>该拆分器将搜索该部分并将其提供给特定的解析器实例。这是一种简化的方法:在现实生活中,我将使用RandomAccessFile查找开始停止点(<element>),然后创建仅对文件的一部分进行操作的自定义FileInputStream。
<element>