V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hujianxin
V2EX  ›  程序员

读出大量数据,速度慢,内存大,用户体验低如何解决呢?

  •  
  •   hujianxin · 2017-04-07 17:52:12 +08:00 · 2257 次点击
    这是一个创建于 2768 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,我遇到过一个任务。需要在数据库里面通过用户指定的时间段读取数据,但是如果用户指定的时间跨度大的话,数据量就超大,读取得是分钟级别的。

    这个时候,如果我需要的数据可以分页显示的话,我可以分页查询,这个非常好好解决。

    但是,如果我需要某种计算,非得需要全部的数据才能完成计算,这个时候,用户就需要在网页前面等数分钟,这种情况,用户体验,内存占用都是不可用级别的。

    这种情况,大家一般怎么解决呢?非常感谢!

    12 条回复    2017-04-07 20:24:42 +08:00
    chenqh
        1
    chenqh  
       2017-04-07 17:54:48 +08:00
    加个小时统计,或者按天统计表
    hujianxin
        2
    hujianxin  
    OP
       2017-04-07 17:56:20 +08:00
    @chenqh 谢谢回复,你的意思是让程序后台定时运行吗?然后运行结果写入数据库?
    kingmo888
        3
    kingmo888  
       2017-04-07 17:57:41 +08:00
    需要计算的指标条目应该是固定的吧, 有变动的应该是时间?


    如果上述属实,那应该有最短统计周期吧,比如看 1 小时的数据变化, 1 天的变化等等。

    你在原始数据基础上应该增加计算好的数据项目。比如原始数据是分钟级的,你可以按照最低统计周期为频率,计算需要计算的指标,在用户需要调用时,只是把统计指标加总即可。
    amghost
        4
    amghost  
       2017-04-07 18:07:32 +08:00 via iPhone
    这不是典型的类 mapreduce 场景吗?大数据量还需要快速的处理结果,似乎是矛盾的吧?所以要么你把计算并行化能加快实时处理的速度,要么提前批处理好。
    ovear
        5
    ovear  
       2017-04-07 18:13:02 +08:00
    通过时间颗粒度控制总数据,就是所谓的抽样了
    hujianxin
        6
    hujianxin  
    OP
       2017-04-07 18:16:22 +08:00
    @kingmo888 谢谢回复,有道理,在很多需求的情况下你说的应该没问题,但是得看需求,多谢了。
    hujianxin
        7
    hujianxin  
    OP
       2017-04-07 18:16:44 +08:00
    @ovear 抽样也是个好方法,在很多情况下非常管用,感谢!
    hujianxin
        8
    hujianxin  
    OP
       2017-04-07 18:18:09 +08:00
    @amghost 大哥,突然觉着你说的好对啊,让我茅塞顿开啊,这本身就很矛盾啊!!

    我试着再从需求方面找找原因。

    谢谢
    chenqh
        9
    chenqh  
       2017-04-07 18:25:37 +08:00
    @hujianxin 是的,应该有一张,小时统计表,按天统计表
    Actrace
        10
    Actrace  
       2017-04-07 18:43:01 +08:00
    不歪需求的情况下。

    本来我想说需要实时的话,多个几个读取用的从数据库来搞。不过看你的描述每次都要等数分钟,那么其实需要把一些关键的指标提取出来预处理完成。
    类似于搜索引擎的做法,比如 sphinx 。这类组件叫做索引器,只做条件匹配的部分,并且针对具体的业务有合适的高速算法(或者是解决方案)。
    这样,你的业务中计算的部分通过索引器解决通常是毫秒级别,再通过传统的数据库取出对应的条目,速度应该是非常快的。
    ichou
        11
    ichou  
       2017-04-07 19:23:16 +08:00 via iPhone
    如果需求不可控(搞不清产品想怎么玩),粒度不可控,这种实时还是上搜索引擎吧, ES 一类的
    如果你能撕逼撕赢产品,不想增加额外成本,按楼上各位说的,按时间粒度做预处理
    snnn
        12
    snnn  
       2017-04-07 20:24:42 +08:00 via Android
    实在不行就上 spark
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   986 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 106ms · UTC 22:12 · PVG 06:12 · LAX 14:12 · JFK 17:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.