1

问题

我们有一个类似 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 Gig,可在 FTP 中使用。
  2. 数据库表列名称可能与 XML 列标记名称不同。
  3. 可能必须添加/定义一些规则来过滤掉行。

问题

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

我在尝试什么

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

我知道这确实是我正在做的最糟糕的事情,而且需要数年时间才能完成,我真的需要一些建议,比如是否使用任何 ORM 以简化检查并加快 XML 解析。

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

4

1 回答 1

1

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

于 2012-06-02T03:08:34.317 回答