关于JAVA处理逻辑分页

来源:10-5 有了过期机制以后内存还不够用怎么办?

七十亿分之一_

2021-01-22

一哥你好:
最近我有遇到一些需求,比如是两张完全没有关联的表需要把数据合并查询并进行分页。利用数据库来处理很简单,可以用union all 这种语句将数据拼接起来并分页,但是我觉得这种方式写出来的SQL比较冗长且不优雅。
这种需求在数据量不大的情况下,可以JAVA单独查询出两张表的数据,然后程序做合并,最后逻辑分页,这种方式非常优雅。但是就是担心如果数据量特别大会OOM。
我的问题是:
1.所以我想知道是否有很好的方式来处理这种尴尬,就是我既想用逻辑分页,又能避免OOM?
2.还有通常数据量达到多少会发生OOM?

写回答

1回答

张勤一

2021-01-22

主管你好:

    首先来说,你的思想非常好,union all 这种查询写在代码里面真的是非常难看的,我个人其实很不喜欢写多表的关联查询(除非是一些 left、right join 方便处理的情况)。你这里所说的情况,如果表的数据量不大,例如只有一两千条,那么,一次性查出来,JVM 里面逻辑分页肯定是更好的做法。

    数据量大是否会 OOM,有两点需要考虑:JVM 自身的配置、数据库内存的限制。所以,这个只能根据实际情况去看。不过,依据我的个人经验来看,当你的 JVM 设置为 4GB 时:

    (1)1万条左右的数据(字段不超过20个),JVM 可以非常轻松的处理,但是,效率不会很高

    (2)1000 ~ 2000 条左右的数据量,JVM 从容应对

    综上所述,如果要用逻辑分页,避免 OOM,且效率要足够高,只能是数据量比较少的情况,我个人建议小千级别的数据都 OK。数据量太大,还是 union all 吧。


    我是勤一,欢迎随时来找我玩!

3
1
七十亿分之一_
非常感谢!
2021-01-22
共1条回复

Java实操避坑指南 SpringBoot/MySQL/Redis错误详解

掌握业务开发中各种类型的坑,,Java web开发领域通用

466 学习 · 204 问题

查看课程