【发布时间】:2011-05-11 15:36:26
【问题描述】:
我正在编写一个应用程序,它处理大量具有深层节点结构的 xml 文件 (>1000)。使用 woodstox(事件 API)大约需要 6 秒钟来解析一个包含 22.000 个节点的文件。
该算法被放置在一个与用户交互的过程中,其中只有几秒钟的响应时间是可以接受的。所以我需要改进如何处理xml文件的策略。
- 我的进程分析 xml 文件(仅提取几个节点)。
- 处理提取的节点并将新结果写入新数据流(生成带有修改节点的文档副本)。
现在我正在考虑一种多线程解决方案(在 16 Core+ 硬件上可以更好地扩展)。我想到了以下策略:
- 创建多个解析器并在 xml 源上并行运行它们。
- 重写我的解析算法线程保存以仅使用解析器的一个实例(工厂,...)
- 将 XML 源拆分为块并将这些块分配给多个处理线程 (map-reduce xml - serial)
- 优化我的算法(StAX 解析器比 woodstox 更好?)/使用具有内置并发性的解析器
我想同时提高整体性能和“每个文件”的性能。
您有解决此类问题的经验吗?最好的方法是什么?
【问题讨论】:
-
不清楚这里需要最大化什么...单个文件的性能,或所有 1000 个文件的总性能。
-
还有一个建议:如果您可以量化文件的大小,以允许计算吞吐量(每秒处理的兆字节数),它可以给出预期性能的概念。我在测试时使用 Woodstox 进行解析的速度通常为 10 - 40 MB/s;但我的硬盘只能提供 5 - 10 MB/s 的持续速度。
标签: java xml multithreading parallel-processing xml-parsing