java吧 关注:1,229,366贴子:12,688,168

一次性查询整张表到内存计算会有问题吗

只看楼主收藏回复

一次性查询三张表的所有数据到内存中计算,以后生产环境数据量加大会有问题吗


IP属地:广东来自Android客户端1楼2022-06-13 20:11回复
    现在需求是查询一整张表的数据,然后遍历这张表的每一条数据,根据其他三张表进行过滤。sql完全写不了这种场景要怎么办啊


    IP属地:广东来自Android客户端2楼2022-06-13 20:13
    收起回复
      虽然我不知道具体怎么做,但我觉得你应该搜索的关键词是分页。


      IP属地:陕西来自Android客户端3楼2022-06-13 22:14
      收起回复
        几千条数据,放到内存里还行,多了感觉顶不住


        IP属地:广东来自Android客户端4楼2022-06-13 22:53
        回复
          游标


          IP属地:广东来自iPhone客户端5楼2022-06-13 23:16
          回复
            我觉得应该可以写sql,把表结构和需求发出来看看


            IP属地:四川来自Android客户端7楼2022-06-14 00:14
            收起回复
              停机维护,写个小程序,执行完了再开服


              8楼2022-06-14 00:19
              回复
                还有,如果数据量很大,别一股脑把你的数据全部读到内存里
                一节一节弄,能理解不?


                9楼2022-06-14 00:20
                收起回复
                  1M数据 假设对应7000条数据库记录
                  那么700万条数据 就是1000M 我们按照1G估算
                  所以一个表后期全量到内存是 1G 你要操作三个表就是3个G
                  即使内存能放下,一次性读取3个G数据到内存处理会非常慢而且也没有这么操作的
                  你好,很高兴看到你的问题,本人无偿答疑, 搜索公众号 提着月亮去火星 回复入群。 可以帮助你很多,群内已经集结了很多自学、求职的小伙伴,期待你的加入。


                  IP属地:北京10楼2022-06-14 13:06
                  回复
                    数据库表中可以加个rootId字段。根据rootId查询出链表节点再做各种join。 比如
                    select (列名) from table1 t1 (inner|left) join table2 t2 on t1.root_id='xxx' and t1.table2_id=t2.id
                    如果是主表和不同的子表的部分数据做关联。类似时间轴那种形式。我个人觉得可以 inner join 和 union 配合使用。


                    IP属地:山东11楼2022-06-14 15:33
                    回复
                      在内存里过滤?是因为sql写不出来还是因为某些特定的方法api目前只能用java调?oracle好像是可以支持调用接口函数的,比如有一个坐标我要判断它是否在指定区域内(逻辑由接口提供)


                      IP属地:江苏来自iPhone客户端12楼2022-06-14 16:25
                      回复
                        这种问题除非是结构完全卡死了,不让你在SQL里面过滤,不然考虑到数据量过大的情况,最好在SQL里面做


                        IP属地:四川来自Android客户端13楼2022-06-14 16:41
                        收起回复
                          数据库中查出的数据建议能少就少,除非是量不大且固定(流程中不会变的)放内存里还可以,你要一次放4个大表的数据在内存里,oom基本跑不了的。最好根据一些外键做条件筛选尽量精确的数据再操作。


                          IP属地:北京来自iPhone客户端14楼2022-06-14 17:28
                          回复
                            建议新表


                            IP属地:浙江来自iPhone客户端15楼2022-06-14 17:52
                            回复
                              如果甲方脾气够好够傻,你们项目经理口才好每次都能圆过去就可以


                              IP属地:广东来自Android客户端16楼2022-06-14 18:11
                              回复