【发布时间】:2014-05-24 18:20:41
【问题描述】:
非常开放的问题, 我需要编写一个从 Oracle 数据库读取数百万条记录(比如说帐户信息)的 Java 客户端。将其转储为 XML 并通过 Web 服务发送给供应商。
最优化的方法是什么?从获取数百万条记录开始。我走的是 JPA/hibernate 路线,在获取 200 万条记录时遇到了 outofMemory 错误。
JDBC 是更好的方法吗?获取每一行并构建XML?还有其他选择吗?
我不是 Java 专家,因此不胜感激。
【问题讨论】:
-
百万可能没有你想象的那么大。
-
如果您在 oracle 内部创建了一个存储过程来生成 XML 文件会怎样?然后,您可以从您的 java 应用程序调用存储过程,并在写入后发送 XML 文件。很多时候最好让数据库本身来完成繁重的数据提升。
-
是否必须是通过 Web 服务发送给供应商的单个 XML 文档?是否可以选择“分块”(将其分解为较小的文件,每个文件包含 100K 行)?
-
@Coffee - 这取决于记录的平均大小,不是吗?如果每条记录平均为 1KB,则为几 GB。如果 OP 正在尝试构建 XML 的内存中 DOM 表示,那么难怪会出现内存问题。
-
采用 SAX 方法来构建您的 XML,您的方法将扩展到任意大量记录,仅受 1. 磁盘空间和 2. 您可以将表/数据库锁定多长时间 (如果预期并发更新),即。假设您正在将 XML 写入输出流。您一次加载到内存中的记录数应该被参数化。