一个用户访问日志,里边记录了IP登录信息,信息内容有登录时间和IP地址。现在要统计 (1) 每一天登录次数最多的1000个IP。以登录次数为序,从高到低排序 (2) 每一周登录次数最多的1000个IP。以登录次数为序,从高到低排序 每一天大概有10亿条IP信息记录。可以用什么样的数据结构?应该不是排序的问题,因为本书数据量太大,快速排序需要有具体的拆分方案!
望各位前辈指点,感激不尽!

解决方案 »

  1.   

    用map<ip,count>
    然后排序
      

  2.   

    宇量级还是插入到数据库在SQL吧
      

  3.   


    10亿条IP,大多都重复的,有效ip不多,就存内存中也没什么问题的。
      

  4.   



    ipv4  最多三十二位,而且 很多私有的都不是独立IP
      

  5.   

    找出来,肯定要流的形式读文件啊。读出一行后,取得ip,存入map的key中,value开始为0,如果第二次找到此ip,就把以前的value加1,代码如:if(map.containsKey(ip)) map.put(ip,map.get(ip)+1);
    else map.put(ip,0);
      

  6.   

    楼主是不是不了解map的机制?网上搜一下。
      

  7.   

    用TreeMap貌似可以哈,存储不重复的IP,遇到重复的value+1,还能排序,但文件太大啦,现在要是想优化一下的话,咋才能稍提高下效率,就是说有个好的算法,比如说一个G的文件,都读到内存好像也不适合,咱先忽略硬件的提升哈!
      

  8.   

    hadoop,mapreduce! 
    我也刚开始学习
      

  9.   

    10亿条记录不算多,看了你的描述,如果重复的IP不多(百万以下)则就用普通地HashMap一边读文件一边做统计。
      

  10.   

    感谢各位的参与,10楼“爱吃番茄”分而治之的思路是可行的,6楼“阿槑”给了我一个提醒
    大文件就拆分成小文件,然后分成N个统计,只是N当中的前1000个都有可能是最高的,最后把N个前1000个再做分析需要个好的算法,再有一天决定结贴,望各位再努力一下!谢谢!