Java JDBC-Oracle11g系统引用游标与pl/sql集合



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

我做了一些研究,发现ref游标基于JDBC获取计数属性多次往返于数据库。(在处理ref游标时,数据如何存储在oracle和JVM内存中的端到端流程,有人能对此有更多的了解吗)

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

感谢你的帮助!

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

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

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

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

担心网络旅行就不那么重要了,因为一个数据包里只能容纳这么多数据。无论你使用什么,都会有很多网络旅行,这实际上取决于你的用例,以确定将其降至最低的重要性。

最新更新