返回信息流设计一个系统,存放URL,IP,访问时间。数据量达到1000亿条记录
1)指定访问时间段,对于给定的URL,统计该URL访问量。
2)指定访问时间段,对于给定的IP,统计该IP的访问量
很想知道具体该如何设计,求教牛人。。。像这种海量数据的题见过不少了,可是一直不知道怎么做。。
这是一条镜像帖。来源:北邮人论坛 / search-engine / #10675同步于 2011/7/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SearchEngine机器人发帖
请教个百度笔试问题,麻烦大家了。
likieyes
2011/7/1镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
看到范围查询第一时间想到B+树……
同一时间一个url可能被多个ip访问,一个ip在同一时间内也可能访问多个页面(延迟或代理?)。想到两种方法:
1. 以时间作为主键建主索引,对url和ip分别hash然后对两个hash结果再hash或map(为了ip和url一一对应)的结果作为主索引的value。或者可以用SHA-1?这样value定长并且一一对应,主索引直接保存url和ip的hash值对。查询的时候先找到对应的时间段,再到对应的hash表中数url或ip的次数,新增记录的时候直接append,定时更新时间的分层索引。
2. 分别以url和ip作为主键建两个hash表,url中保存的是(时间,ip),ip中保存的是(时间,url),新增记录的时候也是append。不过如果时间密集的话是不是也要对各自value中的时间进行分层索引,这样不就回到方法1了么?而且两边都保存了时间是不是有点冗余了。
ms方法1比较好,等待lx补充
【 在 likieyes (likie) 的大作中提到: 】
: 设计一个系统,存放URL,IP,访问时间。数据量达到1000亿条记录
: 1)指定访问时间段,对于给定的URL,统计该URL访问量。
: 2)指定访问时间段,对于给定的IP,统计该IP的访问量
: ...................
我感觉处理URL最好用前缀树,因为大量的URL前面部分都是相同的,这样可以节省空间。当然数据量过大时,需要将前缀树的某些部分写入硬盘
处理IP的话同意一楼的观点,可以用hash。