Java XML 解析 DOM 性能

Java XML parsing DOM performance

我是创建数据存储的团队的一员,该数据存储在大型 XML 文档(此处称为消息)中传递信息。在后端,消息被切碎并分段存储。当调用者请求数据时,这些片段会重新组合成为调用者量身定制的消息。模式有些复杂,所以我们不能开箱即用地使用 JAXB。该团队(这是几年前的事)认为 DOM 性能不佳。我们现在被一层又一层地埋在一半损坏的解析代码中,这些代码需要几个月才能完成,一旦有人更改架构就会崩溃,这让我想把烙铁塞进我的眼球里。据我所知,如果我们改用 DOM 方法,可以减少很多这种放屁代码,并且代码库将更能适应未来的变化。我的团队领导告诉我,使用 DOM 会影响性能,但我找不到任何数据来验证该假设不是来自 2006 年或更早的数据。

通过 DOM 解析大型 XML 文档是否仍然足够慢以保证 XMLBeans 给我们带来的所有痛苦?

编辑 1 回应您的一些评论:

1) 这是一个政府项目,所以我不能去掉 XML 部分(尽管我真的很想去掉)。

2) 据我所知,JAXB 的问题与我们模式中存在的替换组有关。另外,也许我应该重申 JAXB 是使用它的 effort/return 比例之一的问题。

3) 我要找的是某种最近的数据 supporting/disproving 关于使用 XMLBeans 的争论是值得的代码,因为它在性能方面给了我们优势。 Joox 之类的东西看起来更容易处理,而且我很确定在服务器重新组装分解的消息并将其发送回调用者之前我们仍然可以验证结果。

所以在 SO 土地上有没有人知道与这个问题相关的不超过五年的数据?

像 XMLBeans 这样的数据绑定解决方案可以很好地执行,但根据我的经验,如果架构复杂或频繁更改,它们可能会变得非常难以管理。

如果您正在考虑 DOM,则不要使用 DOM,而是使用其他基于树的 XML 模型之一,例如 JDOM2或 XOM。它们的设计要好得多。

更好的是(但考虑到您的起点,这可能是一个过于激进的步骤)根本不要在 Java 中处理您的 XML 数据,而是使用 XRX 架构,其中您使用 XML 基于端到端的技术:XProc、XForms、XQuery、XSLT。

根据您的描述,我认为您需要专注于清理应用程序架构而不是性能。一旦你清理了它,性能调查和调整就会容易得多。

如果您想要重型 XML 处理的最佳技术,您可能需要调查 this paper。最好的技术,看完你就明白了...

论文详情:

Processing XML with Java – A Performance Benchmark
Bruno Oliveira1 ,Vasco Santos1  and Orlando Belo2 1 CIICESI,
School of Management and Technology,
Polytechnic of Porto Felgueiras, PORTUGAL
2 Algoritmi R&D Centre, University of Minho
4710-057 Braga, PORTUGAL