java 按照时间来统计 去除重复数据
设备上安装的app应用,用户点击一次就会调用我们的接口,记录下信息:用户id,打开应用起始时间,结束时间,app名称等等。这些信息会生成log文件,log每一行就是上面记...
设备上安装的app应用,用户点击一次就会调用我们的接口,记录下信息:用户id,打开应用起始时间,结束时间,app名称等等。这些信息会生成log文件,log每一行就是上面记录的信息。这些数据要通过分析之后转存到DB里,为了以后可以在界面统计不同用户点击的次数:按小时、天、月、年。规则就是:如果是按小时,那么同一个用户一小时不管点击多少次都算做1次;如果是按天,一天内不管点击多少次也只算做1次,以此类推。
我要做的就是,分析log的信息,数据库存储应该把这些时间单位都考虑进去。DB就是最终数据,以后我如果想在页面按小时、(天、周、月、年)来统计,直接从表里取数据就可以了。
现在问题就是:我该用什么逻辑或者算法,来把log信息转换成我想要的DB信息呢?而且还要考虑按照时间来去除重复数据。 展开
我要做的就是,分析log的信息,数据库存储应该把这些时间单位都考虑进去。DB就是最终数据,以后我如果想在页面按小时、(天、周、月、年)来统计,直接从表里取数据就可以了。
现在问题就是:我该用什么逻辑或者算法,来把log信息转换成我想要的DB信息呢?而且还要考虑按照时间来去除重复数据。 展开
2个回答
推荐于2016-09-30 · 知道合伙人软件行家
关注
展开全部
你只需要考虑两点进行比较。
第一点:考虑用户ID,第二点:考虑时间
当你读取一条log信息的时候,取出用户ID和时间,
我不清楚你是实时的在执行往DB里面插入还是过一点时间整理,
如果是实时插入,那么你取出这个log信息的时候,就需要去现在的数据库里面进行匹配
带入用户ID,和时间,时间就以小时计算,如:2014-11-18 17
如果在数据库查询出了这条数据,那么跳出,如果没有查询出结果,那么新增。
第二种情况,如果你是隔一段时间执行一次,那么你就只需要新建一个list集合,
然后用取出的log的集合循环和新的list数据进行匹配,如果遇到有的就跳出,如果在新的list集合里面没有的
那么就添加到新的list集合里面。
写的有点乱,我这里不建议你用list,这样匹配的时候循环工作量非常大,建议使用hashmap,键值对处理起来方便,
以用户ID为key 方便处理。
第一点:考虑用户ID,第二点:考虑时间
当你读取一条log信息的时候,取出用户ID和时间,
我不清楚你是实时的在执行往DB里面插入还是过一点时间整理,
如果是实时插入,那么你取出这个log信息的时候,就需要去现在的数据库里面进行匹配
带入用户ID,和时间,时间就以小时计算,如:2014-11-18 17
如果在数据库查询出了这条数据,那么跳出,如果没有查询出结果,那么新增。
第二种情况,如果你是隔一段时间执行一次,那么你就只需要新建一个list集合,
然后用取出的log的集合循环和新的list数据进行匹配,如果遇到有的就跳出,如果在新的list集合里面没有的
那么就添加到新的list集合里面。
写的有点乱,我这里不建议你用list,这样匹配的时候循环工作量非常大,建议使用hashmap,键值对处理起来方便,
以用户ID为key 方便处理。
更多追问追答
追问
我的想法也是通过用户id和时间去数据库里先找,也就意味着一个用户每天最多有24条记录。但是考虑到未来,如果用户量大到500w,怕数据库扛不住(我们用的Mysql)。还有什么更好的方式吗?
追答
那你就一个小时执行一次数据整理,这样你就不用去数据库里面找数据了,只需循环取出的log的集合进行循环,然后新增到新的集合里面,循环的同时你需要查询新的集合里面是否有和老集合里面重复的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询