目前在做一些数据处理的任务,需求是对给出的日期范围处理对应日期的数据文件后显示在dashboard上,如果该日的数据文件已经处理过,则存储成另外的数据文件,下次有该日期的时候则直接读取另外的数据文件。对于有当日日期的数据做特殊处理,即只处理不存储成另外的数据文件,因为本日的数据有可能继续增加,存储没有意义。
�其中对于每日的未处理数据,是多条json数据组成,大小较大,处理完后是单一json数据,数据结构比较复杂,值为列表和字符串,列表里有字典类型数据。对于给定的日期范围,最后需要统计json值的"和"。
以下是我对计算给定日期范围的数据值和的思路:
1.遍历时间读取对应时间文件进行数据处理,得到每天一个json值
2.考虑到如果频繁请求一个区间的和,那么按照以往做acm的经验,必然是前缀和无疑了,即预处理前缀和,那么区间[a,b]的值即为sum[b] - sum[a-1]
3.这方式起初看可行,实际中考虑到的问题有几点:前缀和有个起始点,这个起始点当然可以是任意,但是不容易记忆(即使不记忆也没有太大问题);当请求的天数越过了中间未处理的日期,前缀和会失败(当然存在解决办法是跑定时任务去处理每天的数据);对于json数据,'减'的定义不是很明确,当然不存在会减去不存在的值
4.在通过实践后发现读取文件处理数据数据速度非常快,每次求和也不会造成很长时间消耗(都在1s内出结果,数据还没有大到不可接受)
5.最后的解决方案是每日数据处理后生成数据文件,请求时做求和并缓存,对于当前数据量而言,效率还可以