当前位置: 首页 > 面试题库 >

Java中的并行XML解析

孟乐
2023-03-14
问题内容

我正在编写一个处理具有深节点结构的xml文件(>
1000)的应用程序。使用woodstox(事件API)大约需要6秒钟来解析具有22.000个节点的文件。

该算法被置于与用户交互的过程中,其中只有几秒钟的响应时间是可以接受的。因此,我需要改进如何处理xml文件的策略。

  1. 我的过程分析xml文件(仅提取几个节点)。
  2. 处理提取的节点,并将新结果写入新的数据流(产生具有修改后的节点的文档副本)。

现在,我正在考虑一种多线程解决方案(在16个Core +硬件上可更好地扩展)。我想到了以下策略:

  1. 创建多个解析器并在xml源上并行运行它们。
  2. 重写我的解析算法线程保存以仅使用解析器的一个实例(工厂,…)
  3. 将XML源拆分为多个块,并将这些块分配给多个处理线程(map-reduce xml-serial)
  4. 优化我的算法(StAX解析器比woodstox更好吗?)/使用内置并发解析器

我想同时改善整体性能和“每个文件”的性能。

您是否有处理此类问题的经验?最好的方法是什么?


问题答案:
  1. 这很明显:只需创建多个解析器,然后在多个线程中并行运行它们即可。

  2. 看看Woodstox的性能(此刻请尝试使用Google缓存)。

  3. 如果XML的结构是可预测的,则可以做到这一点:如果它具有很多相同的顶级元素。例如:

    <element>
    <more>more elements</more>
    



 类似资料:
  • 问题内容: 我正在尝试使用Groovy和Java的ScriptEngine API解析XML。下面的代码正是这样做的,但是我想知道是否有更好的方法可以做到这一点。还有与此相关的性能影响吗? 输出: 问题答案: 您的Groovy脚本可能是 “ groovy-er” … 这做同样的事情: 确实,您可以使用而不是JVM脚本引擎,这可以使您了解:

  • 问题内容: 您如何解析存储在Java字符串对象中的xml? Java的XMLReader仅从URI或输入流中解析XML文档。无法从包含xml数据的字符串进行解析? 现在,我有以下内容: 在我的处理程序上,我有这个: 提前致谢 问题答案: 该SAXParser的可以读取的的InputSource。 一个 InputSource的 可以采取 读者 在其构造 因此,您可以通过StringReader来解

  • 我真的希望你能在这件事上帮我....我需要从我的xml文件中获取特定的数据,但我卡在了一个点上,我不知道如何继续... 我想从网络获得:网络名称;From代码:mcc和mnc代码;From设置:名称、id、类型、参数名称、值; 这就是我的xml文件的结构: 这就是我目前掌握的......我真的不能再继续下去了...在字符串content=CNode.GetLastChild().GetTextCo

  • 问题内容: 什么HTML解析器具有以下功能: 快速 线程安全 可靠且无错误 解析HTML和XML 处理错误的HTML 有一个DOM实现 支持HTML4,JavaScript和CSS标签 相对简单的面向对象的API 您认为哪种解析器更好? 谢谢。 问题答案: ApacheTika是最佳选择。Apache最近从现有项目中提取了许多子项目并将其公开。提卡(Tika)是其中之一,以前是Apache Luc

  • 主要内容:什么是 XML 解析器?XML 解析是指通过 XML 文档来访问或修改数据。 什么是 XML 解析器? XML 解析器 提供了一种访问或修改 XML 文档中数据的方法。Java 提供了多种选项来解析 XML 文档。以下是常用于解析 XML 文档的各种类型的解析器。 Dom解析器: 通过加载文档的完整内容并在内存中创建其完整的层次树来解析 XML 文档。 SAX解析器: 在基于事件的触发器上解析 XML 文档。不将完整的文

  • 问题内容: 我需要转换具有嵌套(分层)结构形式的大型XML文件 变成更扁平(“切碎”)的形式,每个重复的嵌套块有1个块。 数据具有许多不同的标签和层次结构变化(尤其是在层次XML之前和之后的切碎XML的标签数量),因此,理想情况下,不应对标签和属性名称或层次级别进行任何假设。 仅4个级别的层次结构的顶层视图看起来像 然后所需的输出将是 也就是说,如果在每个级别上都有不同的组件,那么将产生总共不同的