java 按照时间来统计 去除重复数据

设备上安装的app应用,用户点击一次就会调用我们的接口,记录下信息:用户id,打开应用起始时间,结束时间,app名称等等。这些信息会生成log文件,log每一行就是上面记... 设备上安装的app应用,用户点击一次就会调用我们的接口,记录下信息:用户id,打开应用起始时间,结束时间,app名称等等。这些信息会生成log文件,log每一行就是上面记录的信息。这些数据要通过分析之后转存到DB里,为了以后可以在界面统计不同用户点击的次数:按小时、天、月、年。规则就是:如果是按小时,那么同一个用户一小时不管点击多少次都算做1次;如果是按天,一天内不管点击多少次也只算做1次,以此类推。
我要做的就是,分析log的信息,数据库存储应该把这些时间单位都考虑进去。DB就是最终数据,以后我如果想在页面按小时、(天、周、月、年)来统计,直接从表里取数据就可以了。
现在问题就是:我该用什么逻辑或者算法,来把log信息转换成我想要的DB信息呢?而且还要考虑按照时间来去除重复数据。
展开
 我来答
清茶稀饭
推荐于2016-09-30 · 知道合伙人软件行家
清茶稀饭
知道合伙人软件行家
采纳数:520 获赞数:3575
2009年,大学计算机信息科学与技术专业毕业, java行业从5年经验,各大数据库都精通,也会其他软件技术。

向TA提问 私信TA
展开全部
你只需要考虑两点进行比较。
第一点:考虑用户ID,第二点:考虑时间
当你读取一条log信息的时候,取出用户ID和时间,
我不清楚你是实时的在执行往DB里面插入还是过一点时间整理,
如果是实时插入,那么你取出这个log信息的时候,就需要去现在的数据库里面进行匹配
带入用户ID,和时间,时间就以小时计算,如:2014-11-18 17
如果在数据库查询出了这条数据,那么跳出,如果没有查询出结果,那么新增。
第二种情况,如果你是隔一段时间执行一次,那么你就只需要新建一个list集合,
然后用取出的log的集合循环和新的list数据进行匹配,如果遇到有的就跳出,如果在新的list集合里面没有的
那么就添加到新的list集合里面。
写的有点乱,我这里不建议你用list,这样匹配的时候循环工作量非常大,建议使用hashmap,键值对处理起来方便,
以用户ID为key 方便处理。
更多追问追答
追问
我的想法也是通过用户id和时间去数据库里先找,也就意味着一个用户每天最多有24条记录。但是考虑到未来,如果用户量大到500w,怕数据库扛不住(我们用的Mysql)。还有什么更好的方式吗?
追答
那你就一个小时执行一次数据整理,这样你就不用去数据库里面找数据了,只需循环取出的log的集合进行循环,然后新增到新的集合里面,循环的同时你需要查询新的集合里面是否有和老集合里面重复的。
dgddssdhh
2014-11-18 · TA获得超过768个赞
知道小有建树答主
回答量:1455
采纳率:53%
帮助的人:517万
展开全部
我觉得你可以先把 所有的访问数据 都保存在数据库里面,这样操作数据库应该比操作天容易。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式