将巨大的XML行与数据库表记录进行比较 - 自定义要求

时间:2012-05-31 22:54:47

标签: java database xml-parsing compare stax

问题

我们有一个XML(它有一些需要过滤的非unicode)数据,

<row><div>1234</div><dept>ABCD</dept></row>
<row><div>5678</div><dept>EFGH</dept></row>

仅提及2个列标签以便于理解。实际上每个

中有超过20个列标签

将XML数据作为记录直接插入到Oracle模式表中,作为

div_c  qdept
1234   ABCD
5678   EFGH

更多信息

  1. XML文件超过9个Gigs,可在FTP中使用。
  2. 数据库表列名称可能与XML列标记名称不同。
  3. 可能必须添加/定义一些规则来过滤掉行。
  4. 问题

    解析这个巨大的XML并找出该记录是否存在于数据库表中的适当方法是什么?有哪些开源工具可供使用?

    尝试的是什么

    • 使用带有无效字符fiter(FilterReader)的默认实现(XMLInputFactory)编写StAX解析器
    • 计划将XML拆分为块
    • 让并发线程处理每个块
    • 每个线程都会生成一个查询来检查数据库中是否存在(我知道它是荒谬的)
    • 创建连接池并按每个线程执行这些查询

    我知道这真的是我正在做的最糟糕的事情并且需要数年时间才能完成,我真的需要一些建议,比如是否与任何ORM一起使检查更容易并快速进行XML解析。

    这样的一些建议对我有帮助。

1 个答案:

答案 0 :(得分:1)

呀。我认为你使用StAX是正确的。你肯定想要流,StAX似乎有最简单的流式XML API。我不会马上去ORM。大多数ORM是往返数据。它可以节省您进行机械转换的工作。当你有非常结构化的数据时,这会很好,但两个模式之间的映射并不是很复杂。在这里,您尝试将数据从一种格式导入另一种格式。听起来您的大型数据集具有相当简单的模式,但映射是更复杂的部分。使用自定义代码。 Pawel对临时表的建议听起来不错。尝试在一次操作整个数据集的存储过程中执行尽可能多的处理(旧的和导入的)。您不希望继续将这些行从数据库中来回传输到您的应用程序。