美文网首页
java操作mysql--大数据量情况

java操作mysql--大数据量情况

作者: 简书徐小耳 | 来源:发表于2019-06-17 23:10 被阅读0次

java操作mysql遇到大量数据会存在内存溢出的危险
分为两部分一个是java层方面,还有一个是mysql层

java

普通的方式

  • 1.java发出请求,mysql响应
  • 2.java获取数据的时候是不停地把缓冲区数据捞到内存中,一直到数据发送结束,等到所有数据获取完毕。我们客户端才能进一步操作,这就导致OOM
  • 3.客户端只需要主动通信一次,剩余的都是服务器端主动推送数据

useCursorFetch

  • 1.每次都要主动去请求指定大小的数据,这回导致通信频繁
  • 2.当数据量很大的时候,为了避免长期占用索引数据,会把查询到的所有数据建立临时表

采用statement.setFetchSize(Integer.MIN_VALUE)并确保游标是只读向前滚动的即可(为游标的默认值),也可以强制类型转换为com.mysql.jdbc.StatementImpl,然后调用其内部方法:enableStreamingResults()这样读取数据内存就不会挂掉了

  • 1.客户端只需要主动通信一次,剩余的都是服务器端主动推送数据
  • 2.客户端每次只从buffer里面获取一部分数据即响应给业务,业务处理完成之后继续从buffer获取,服务端感受到客户端的buffer不满的时候会自动发送

Mysql层

单表查询mysql如何返回

  • 1.客户端请求到了之后,server层让引擎层去执行,引擎层获取到一个记录后就立即发送给客户端

多表查询mysql如何返回

  • 1.驱动表执行完毕一次之后会形成一个结果集,然后被驱动表会多次执行(执行次数就是驱动表的大小)每次取得一个完整记录也是立马发送
  • 2.如果驱动表的结果集太大则会形成物化表(临时表,有基于内存的 如果再大则会变成B+树存储到磁盘)

总结

  • 1.客户端采用stream方式最好,服务端则不用关心内存的问题

相关文章

  • java操作mysql--大数据量情况

    java操作mysql遇到大量数据会存在内存溢出的危险分为两部分一个是java层方面,还有一个是mysql层 ja...

  • 基础数据结构和算法3:链表

    1. 链表是什么? 顺序表的缺点添加和删除操作需要移动元素。当数据量特别大的情况,可能没有连续的内存可使用。 链表...

  • POI操作Excel,公式计算实战

    POI可以说是目前Java里面操作Excel唯一的选择。好用,但也有问题,比如操作大数据量的.xlsx,那速度令人...

  • 关于iOS数据库大数据量的优化策略

    前言: 对于目前的iOS应用,大的数据量操作是一个不可避免的问题,本文仅对sqlite数据库大数据量操作进行优化策...

  • JDK8下parallelStream()踩坑

    近日在开发过程中,想利用Java提供发流进行数据集合操作,数据量大约是在小几十万左右,本想采用并行流去进行操作,把...

  • pymongo 插数据

    批量插入 insert_one 这种方法在数据量较小时可以很好的工作,但是当数据量非常大时,此种操作会非常慢,我们...

  • 使用JDBC简化数据库操作

    只需用ConnectionUtil.java和DBReflectionUtil.java搞定简单并且多属性,数据量...

  • Oracle 删除表记录

    一个简单的场景 - 删除表中的数据 当操作的数据量比较多的情况下,在简单的delete操作之后,还需要做一些配套的...

  • Java之IO(四)缓冲流

    之前学习的字节流字符流,都可以读写文件对数据进行操作,当读写数据量很大时,读取的速度会很慢影响效率,那么Java中...

  • java学习路线

    javaSE java基础语法 java文件操作 java网络操作 java多线程 java数据库操作 java ...

网友评论

      本文标题:java操作mysql--大数据量情况

      本文链接:https://www.haomeiwen.com/subject/yxutqctx.html