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

大数据的显示优化问题

  •  
  •   lovelybear · 2018-09-06 19:18:16 +08:00 · 1458 次点击
    这是一个创建于 459 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们现在的软件的数据量比较庞大,大概 200-300 万的节奏,用户希望可以将我们的数据以图表的方式,用 select 语句查询到的数据大概有 1w 以上,如果显示在图表上的话,会很慢,影响用户体验。请问如何优化呢? 其实,编程不仅仅是实现功能,内部的优化才是真正体现功力的地方,以前的编程过于注重业务逻辑,而忽视性能优化,这的确是个错误啊!

    15 回复  |  直到 2018-09-14 10:30:17 +08:00
        1
    swcat   2018-09-06 19:45:38 +08:00 via Android
    缓存,定时更新
        2
    fangchang   2018-09-06 19:48:57 +08:00
    materialize
        3
    lovelybear   2018-09-06 20:16:04 +08:00
    @fangchang C# WPF 的
        4
    lovelybear   2018-09-06 20:16:42 +08:00
    @swcat 嗯,具体如何操作呢?比如写个类定时更新,然后缓存进内存或者是文件?
        5
    swcat   2018-09-06 20:34:47 +08:00 via Android
    function getData()
    {
    if (cache.hasExpired() )
    {
    cache.update()
    }
    return cache.data
    }

    hasExpired 方法就是你的更新策略,
    如果写少读多,可以设置为最后更新时间
    不确定就弄成定时更新
        6
    swcat   2018-09-06 20:35:38 +08:00 via Android
    写进文件还是内存看情况啊
        7
    lihongjie0209   2018-09-06 20:48:13 +08:00
    图表是什么数据? 报表: 统计性的 或者是地图: 展示型的


    对于统计型
    如果数据是只读的, 那么你可以提前计算好, 存哪里无所谓, 然后展示给用户看
    如果数据是可写的, 那么就需要你动态计算了, 也就是你提到的会卡
    以上两种方法的混合解决方案: 首先定时计算, 但是这个数据可能是不准确的, 因为数据还可写, 在每次更新数据的时候重新计算一遍, 最佳退化到只读的情况, 最差退化到可写的情况.



    对于展示型的数据:
    展示粒度没必须要那么细, 一万条数据 1000 条展示个大概, 放大的时候再加载嘛
        8
    liprais   2018-09-06 20:56:20 +08:00 via Android
    预先计算,近似估计
        9
    mingyun   2018-09-06 22:45:38 +08:00
    clickhouse 了解下 300 亿数据查询几秒
        10
    lovelybear   2018-09-07 08:31:01 +08:00 via Android
    @lihongjie0209 就是 chart 控件
        11
    owenliang   2018-09-07 09:10:34 +08:00 via Android
    elasticsearch 间隔取样
        12
    Eoston   2018-09-07 09:23:10 +08:00
    数据采样
        13
    lovelybear   2018-09-07 09:36:21 +08:00 via Android
    @Eoston 恩看上去是这样,但请问具体如何实现?
    比如
    int totallength=mydata.Length;

    for (eachdata in mydata)
    {

    }
        14
    Eoston   2018-09-13 09:43:29 +08:00   ♥ 1
    @lovelybear 对这一万条数据每隔 10 条取一条,然后综合返回给前端~~数据量特别大的时候,可以用多线程对拿到的数据分组,每组里面隔一定的数据取出来
        15
    lovelybear   2018-09-14 10:30:17 +08:00
    @Eoston 多谢,问题已经解决了,隔 50 取一条
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4167 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 07:41 · PVG 15:41 · LAX 23:41 · JFK 02:41
    ♥ Do have faith in what you're doing.