大家好,我遇到过一个任务。需要在数据库里面通过用户指定的时间段读取数据,但是如果用户指定的时间跨度大的话,数据量就超大,读取得是分钟级别的。
这个时候,如果我需要的数据可以分页显示的话,我可以分页查询,这个非常好好解决。
但是,如果我需要某种计算,非得需要全部的数据才能完成计算,这个时候,用户就需要在网页前面等数分钟,这种情况,用户体验,内存占用都是不可用级别的。
这种情况,大家一般怎么解决呢?非常感谢!
1
chenqh 2017-04-07 17:54:48 +08:00
加个小时统计,或者按天统计表
|
3
kingmo888 2017-04-07 17:57:41 +08:00
需要计算的指标条目应该是固定的吧, 有变动的应该是时间?
如果上述属实,那应该有最短统计周期吧,比如看 1 小时的数据变化, 1 天的变化等等。 你在原始数据基础上应该增加计算好的数据项目。比如原始数据是分钟级的,你可以按照最低统计周期为频率,计算需要计算的指标,在用户需要调用时,只是把统计指标加总即可。 |
4
amghost 2017-04-07 18:07:32 +08:00 via iPhone
这不是典型的类 mapreduce 场景吗?大数据量还需要快速的处理结果,似乎是矛盾的吧?所以要么你把计算并行化能加快实时处理的速度,要么提前批处理好。
|
5
ovear 2017-04-07 18:13:02 +08:00
通过时间颗粒度控制总数据,就是所谓的抽样了
|
10
Actrace 2017-04-07 18:43:01 +08:00
不歪需求的情况下。
本来我想说需要实时的话,多个几个读取用的从数据库来搞。不过看你的描述每次都要等数分钟,那么其实需要把一些关键的指标提取出来预处理完成。 类似于搜索引擎的做法,比如 sphinx 。这类组件叫做索引器,只做条件匹配的部分,并且针对具体的业务有合适的高速算法(或者是解决方案)。 这样,你的业务中计算的部分通过索引器解决通常是毫秒级别,再通过传统的数据库取出对应的条目,速度应该是非常快的。 |
11
ichou 2017-04-07 19:23:16 +08:00 via iPhone
如果需求不可控(搞不清产品想怎么玩),粒度不可控,这种实时还是上搜索引擎吧, ES 一类的
如果你能撕逼撕赢产品,不想增加额外成本,按楼上各位说的,按时间粒度做预处理 |
12
snnn 2017-04-07 20:24:42 +08:00 via Android
实在不行就上 spark
|