繁体   English   中英

什么是从Oracle数据库获取大量数据到Java对象的最快方法

[英]what's the fastest way to get a large volume of data from an Oracle database into Java objects

从Oracle数据库获取大量数据到Java对象的最快方法是什么。

有关数据组织方式的Oracle技巧吗?

我在考虑使用普通的JDBC而不是任何Hibernate样式库?

让Oracle生成一个文件然后从文件中读取会不会更好 - 尽管这必须以编程方式完成。

所有的想法都赞赏

我不是Java或JDBC专家,但如果您计划从数据库中删除大量行,则可能会通过增加连接上的预取行来获益。

Connection conn = DriverManager.getConnection ("jdbc:oracle:","user","password"); 

//Set the default row prefetch setting for this connection 
((OracleConnection)conn).setDefaultRowPrefetch(100); 

我相信JDBC的默认值是一次获取一行,因此您需要为获取的每一行支付往返数据库的费用。 (注意,我已经看到文档表明默认是每次往返10行)。 将预取设置为更大的数字将在每次往返数据库时获取更多行。 根据行数和网络性能,速度的提升可能会非常显着。

根据您想要使用多远,我想要删除jdbc并使用Oracle Call API和JNI编写与数据库驻留在同一台机器上的自定义应用程序,这将是最快的......

使用JDBC可以简单地使用一个准备好的语句,然后如果这还不够(并且取决于瓶颈的位置),尝试制作存储过程可能要简单得多。 像Hibernate这样的ORM完成的缓存不应该打折,所以我想你必须做一些基准测试。 此外,如果瓶颈是数据库并且您编写了一个提高读取性能的存储过程,那么您仍然可以使用Hibernate将数据封送到java对象。 请参阅使用存储过程进行查询

无论你做什么,设计/实现“延迟初始化”[实际上只适用于复杂的对象层次结构/网络; 你说java对象(复数)所以我想象的不仅仅是一个映射到单个对象的表]。 所以基本上,你只是阅读那时所需的对象; 当你运行一个getter方法时,它会对这些数据进行更多的db调用。

Java世界中有时会忽略的另一个技巧是:如果你有一些来自代码的复杂sql,你可以在Oracle端创建一个视图,在那里嵌入那个复杂性,然后将你的对象映射到视图; 所以如果你能像视图那样展平你的对象,那么你就是在做生意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM