oracle查询大于2条以上数据_实现万行级数据读取优化

本文探讨了在Oracle数据库中优化超过2条数据的查询方法,包括JDBC的batchsize和fetchsize使用,以及Mybatis中的fetchsize配置。在面临10w条数据查询时,通过调整fetchsize将查询时间降至1s。然而,由于Dubbo的8M传输限制,最终采用了数据分片请求的策略以避免超时问题。同时,还提及了数据封装优化的思路,如Dozer库用于减少转换性能消耗。
摘要由CSDN通过智能技术生成

业务场景:

基于导出的功能上,要求一次性查询10w条数据。但是这个10w的开始值和结束值不固定(比如:startNum = 123; endNum = 100123;)

  • 难点一: dubbox时间超时规定为1s,服务调用图如下: 0a0295290888d2b9c8f91d890596b460.png

  • 难点二:
    数据封装转换性能消耗较高,目前使用的BeanUtils

  • 难点三: 并发能力很弱,在分割查询的过程中,如果有其他的服务进入,很容易导致数据混乱

公司使用的数据库为oracle,目前我自己实现的查询功能总耗时8s。这个时间能不能再次缩短?有没有比较好的方案对数据分割查询?

对于JDBC batchsize 和 fetchsize的一次尝试

Batch和Fetch两个特性非常重要,Batch相当于JDBC的写缓冲,Fetch相当于读缓冲。在加入这两个特性之后,查询10w条尝试,根据描述,能个提升4倍的时间。参考文章:http://blog.sina.com.cn/s/blog_9f8ffdaf0102x3nf.html

将代码摘抄之后,修改数据库连接的账户密码。单独使用检查代码是否能够独立运行,main,报错如下:

Exception in thread "main" java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at com.example.mybatisplusdemo.temp.Test.fetchRead(Test.java:74)
at com.example.mybatisplusdemo.temp.Test.main(Test.java:22)复制代码
采坑一:

测试的功能为一个完整的spring

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值