关于上网时长的高性能计算问题
虎叔 2013-04-26 03:00:36 背景:
原始数据是上线一条数据纪录,下线一条数据数据纪录。并且数据量巨大,每秒产生20K~50K条数据。
数据纪录格式为文本,大概是这样:
IP地址,端口号,时间,上线/下线
现在需要当收到下线数据纪录时,找到之前的上线数据纪录。同时计算出该用户上网的时长。上网时间=下线时间-上线时间。
需要注意的问题:
1、上网时间可能会超过一周,因此前面上线纪录的数据需要保存较长时间,假设最长一周。
2、如何高效迅速的查到的对应的上线数据纪录,而不至于整个处理程序被堵塞。
3、按照IP地址、端口号来标识唯一一次用户上线行为,用户记录数最大可能会达到20M条纪录。假设可以全部放入内存中。
4、收到用户下线纪录后,完成上线时长的计算后,应该将内存中的相应上线纪录数据删除。删除也会有性能开销。
请各位大牛给一些思路和方案,感觉应该有对应这个问题的数据结构和算法。谢谢!!!最多只能一次给100分,如果问题解决,可以另外开帖子散分。