一个非常简单的表
ID主键 和 Time 时间字段
数据量大概每天2W,现在要生成一个图表。
目前查询方式是这种。
now = timezone.now().date() - timezone.timedelta(days=2)
current_day_data = SerachAssetData.objects.filter(time__gte=now)
data = [0 for a in range(24)]
for a in current_day_data:
data[(a.time.hour)] += 1
data = data[:6] + data[6:]
用这个查询,需要1~2秒左右。
是否能进行速度优化呢? 还是说。这种数据不能实时查询,需要定时缓存?
你现在的做法是把2天的数据一次性拉出来,数据量在2W+
然后去循环处理这2W+的数据,性能肯定快不到哪去
1、实时查询
你完全可以这样做,从日期时拆出小时字段进行聚合
select hour, count(1) from 表 where time>='2017-07-28' group by hour
如果性能还不理想,那就加一个hour字段并建立索引
2、允许延时
如对数据实时性要求不高可以定时计算存放到结果表,比如10分钟计算一次