1

我想请教专家,从Java应用程序(使用JDBC)从oracle 11g数据库中获取3000-5000条记录的建议是什么。我们的标准是始终调用存储过程。

我做了一些研究,发现 ref cursor 根据 JDBC fetch count 属性对数据库进行多次往返。(在处理引用游标时,有人可以更清楚地了解数据如何存储在 oracle 和 JVM 中的内存中的端到端流程

我认为集合更有效,因为数据从 oracle db 一次性发送给调用者(Java)(使用批量收集)。通过这种方法,我们可以避免从 Java 到 Oracle 服务器的多次网络调用。这是一个真实的假设吗?

感谢你的帮助!

4

1 回答 1

2

这是一个比任何人都愿意在帖子中承诺的更大的话题。这是一个讨论Oracle 如何管理读取一致性的链接。整个页面可能是一个很好的阅读,可以了解服务器中正在发生的事情。这里还有一篇文章讨论了使用集合会发生什么。您将如何将集合返回给 JDBC 客户端(我从未尝试过)?

从本质上讲,性能涉及很多方面,从如何配置数据库到如何调整网络以适应磁盘性能,再到客户端性能等。

简短的回答是你需要尝试一些事情。检索 3-5k 记录并不多,这取决于记录有多大,您通过网络带回。如果它们是 20 字节的记录,并且您的网络(MTU?)大小是 4k 块,则一个块中可以容纳大约 200 条记录。在某些时候,你会遇到收益递减规律。

我习惯使用存储过程,但您不需要。这将取决于查询的复杂性(表的数量和连接的类型)以及像 DBA 这样的人能够进入并查看查询在做什么的能力。

担心网络旅行不太重要,因为您只能在一个数据包中填充这么多数据。无论您使用什么,都会有许多网络旅行,这实际上取决于您的用例来确定将其降至最低限度的重要性。

于 2015-10-28T14:59:21.330 回答