【问题标题】:Parse large number of xml files in java在java中解析大量的xml文件
【发布时间】:2015-08-12 16:29:02
【问题描述】:

我将从 MQ 获取大量 xml 文件(每隔几分钟数以万计)。 xml 文件不是很大。我必须提取信息并将其保存到数据库中。不幸的是,我不能使用第三方库(除了 apache commons)。在这种情况下通常使用什么策略/技术? java或apache中有没有xml解析器可以很好地处理这种情况?

我还可以补充一点,我使用的是 jdk 1.4

【问题讨论】:

  • STAX 是内置的并且运行良好。 Linkage.
  • 应该是原子操作吗?我的意思是如果某些 xml 中有一些错误应该怎么办?
  • 哇,真快:) 谢谢,我会看看。但是,我如何处理这些数据库插入?
  • @Sach: 如果有错误,我只需要记录它并继续下一个 xml
  • 使用数据库INSERTMoar links. 但是,当您说“MQ”时,您可能处于已定义数据库源或 API 的环境 (JEE) 中。询问要求。

标签: java xml parsing


【解决方案1】:

基于 cmets 和围绕该主题的讨论 - 我想提出一个统一的解决方案。

  1. 使用 SAX 解析 XML 文件 - 正如@markspace 提到的,你应该去 使用内置的 SAX,具有良好的性能。

  2. 如果可能,请使用 BULK INSERTS - 因为您计划插入一个大 数据量考虑您正在阅读什么类型数据,并且 存入数据库。是否所有 XML 文件都包含相同的 架构(这意味着它们对应于 数据库)或者它们代表不同的对象(这意味着你 最终会将数据插入到多个表中)。

    如果需要插入的所有 XML 文件的架构 数据库中的同一张表,然后考虑对这些数据进行批处理 对象并将它们批量插入到数据库中。这将成为;这将是 绝对在时间和资源方面表现更好 (您将只打开一个连接以将批处理保存为 反对每个对象的多个连接)。当然你 需要花一些时间来调整你的批量大小,并且 决定批量插入的错误处理策略(丢弃 全部 v/s 丢弃错误的

    如果 XML 文件的架构不同,则考虑合并 将类似的 XML 分组,以便您可以批量插入这些组 稍后。

  3. 最后 - 这很重要:确保释放所有 文件句柄、数据库连接等资源,一旦你 已完成处理或遇到错误。在简单的 单词在正确的地方使用try-catch-finally

虽然并不完整,但希望此答案为您提供一组关键检查点,您在编写可扩展的高性能代码时需要考虑这些检查点

【讨论】:

  • 谢谢普拉哈拉德。另一个问题是我们如何确定这些批量插入的频率?
  • @lemonTea 这个问题没有明确的答案。您必须根据各种因素(例如内存消耗、数据必须持久保存到数据库的时间限制等)来决定批量插入的频率。确定正确参数的唯一方法是在模拟生产的环境中观察一系列值的应用程序性能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 2014-12-06
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
相关资源
最近更新 更多