统计慢的报表一般怎么处理。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
heganghua
V2EX    数据库

统计慢的报表一般怎么处理。

  •  
  •   heganghua 184 天前 2176 次点击
    这是一个创建于 184 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前项目有个需求是,优化项目想所有大于 3 秒的接口。
    但是在我们的系统里面充斥着几十张各种维度的统计报表。有得需要连表查询六七八张表,有的方法快五千多行快六千行(屎山,暂时不考虑去优化代码了)。
    目前想到了有几种方案:
    1 、加缓存,每次查询都从缓存里面找,未命中才查库。但是这个问题就是,虽然返回数据不算很多,但是架不住条件多,每个组合起来,key 就多了,服务器内存也不能再加了,所以没有考虑。
    2 、考虑使用中间表统一处理, 每个报表建立一张中间表,统一采用定时任务,调用接口,获取最小维度的数据,放入中间表中,前端调用接口时,直接获取中间表的数据然后使用条件过滤,这样再需要去计算以及统计了。但是这种有点复杂,因为领导系统设计成统一的,也就是前端调用同一个接口,后端判断需要获取的是哪个报表,然后根据策略去获取对应中间表的数据。
    还有哪些方案可以处理。
    20 条回复    2025-04-10 16:14:50 +08:00
    xwayway
        1
    xwayway  
       184 天前
    报表 3s 就要优化了?那只能把报表结果放入大宽表了
    Mandyer
        2
    Mandyer  
       184 天前
    这么卷吗,我们财务一个报表可能要十几秒才能查出来,一个表可能都要 3 秒了
    cccn
        3
    cccn  
       184 天前
    做个任务中心,提交生成报表的请求,在任务队列中执行。生成完之后网页通知下载。
    cccn
        4
    cccn  
       184 天前
    @cccn 如果需要快速,那当我没说
    lifei6671
        5
    lifei6671  
       184 天前
    你的报表实际上是对多个表数据的汇总和计算是吧。如果不是实时报表,可以离线计算。如果是实时报表,可以监听 MySQL 的 binlog ,实时建宽表。
    jjx
        6
    jjx  
       183 天前   1
    erp 报表都是这样
    1. 表连接多, 什么部门员工,区域,产品,产品类型, 品牌, 单位,仓库,库位,合作伙伴等等, 搞得数据冗余没法做
    2. 查询条件多, 且不断的增加, 索引最后没法可加, 总不能都加上
    3. 查询结果要精确,你搞个全文检索是不行的, 用户不认可
    5. 查询条件多+粒度细, 导致 你想用缓存结果没法处理, 因为条件多变,缓存通常不匹配
    6. 报表必须得有小计和总计,导致查询最少要两次, 一次汇总一次明细

    等等

    通常优化了一次, 下次需求进去就直接打回原形


    sap 就很取巧, 搞了个 HANA 内存数据库, 弄个几十上百 g 内存, 将关系数据库全部搬到内存中去搞
    lyxxxh2
        7
    lyxxxh2  
       183 天前
    没我们报表牛
    点两次查询,把 cpu 干到 80%。
    一次接口要 1 分钟。

    之前老板点着没反应,又点了十几下,然后服务器崩了。
    Tinyang
        8
    Tinyang  
       183 天前
    数据定时聚合到另一张表里面。然后单表查询这张聚合表
    cosen
        9
    cosen  
       183 天前
    1.按照报表优先级可以每天凌晨提前预热到缓存
    2.预聚合做成大宽表
    cheng6563
        10
    cheng6563  
       183 天前
    报表 3 秒....搞成异步的,接口时间就下来了。
    heganghua
        11
    heganghua  
    OP
       183 天前
    @lyxxxh2 那就是接口没有做幂等性或者,前端没有限制。我不过我记得 cpu 的使用率是争对单核来的吧
    heganghua
        12
    heganghua  
    OP
       183 天前
    @Mandyer 领导一句话的事情
    heganghua
        13
    heganghua  
    OP
       183 天前
    @cccn 我们现在大数据量的下载就是这样弄的
    heganghua
        14
    heganghua  
    OP
       183 天前
    @lifei6671 是的, 就是汇总什么的计算,实时性要求不是很高,领导难得看一次。但是看一次就说慢,要优化。。。
    heganghua
        15
    heganghua  
    OP
       183 天前
    @jjx 这样就比较重了, 还要引入中间件,而且也没有人会这玩意
    heganghua
        16
    heganghua  
    OP
       183 天前
    @Tinyang 目前来说, 是这样做的
    heganghua
        17
    heganghua  
    OP
       183 天前
    @cosen 目前来说,是这样做的,但是没有缓存的参与, 服务器内存已经是上限。
    lyxxxh2
        18
    lyxxxh2  
       183 天前
    @heganghua
    查询接口还做幂... 我们只有 cud 做。
    前端倒是做了表格 loading,但是没禁用查询按钮。

    用的 fpm,也在同事本地的 wsl2 测试过。
    点了十几次查,把他电脑也干死机了,只能强制电源键重启。
    spritecn
        19
    spritecn  
       183 天前
    现在的标准解不是 MQ + ES 么,还是我过时了
    heganghua
        20
    heganghua  
    OP
       183 天前
    @lyxxxh2 也对, 这是一个查询, 我们查询好像也只是加了 loading , 有时候加了 loading ,出异常了还没有在 finally 中释放。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1234 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 17:23 PVG 01:23 LAX 10:23 JFK 13:23
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86