一道面试题(索引 分词)

2 篇文章 0 订阅

说有一个监控系统,会监控访问的url和ip还有时间。需求是可以存储1000亿条信息。 
1.可以按照url查询某个时间段内的访问量。 
2.可以按照ip查询某个时间段内的访问量。 
请设计一个系统? 

 

假设就一张表,表里3个字段 

url, ip, date 

存上1000亿条数据,你需要在这3个字段上都建立索引,利用分词 

如果里面有一条数据 
url:http://www.iteye.com/topic/1037635 

分解这个url的词源可以为http,www.iteye.com,topic/1037635 

ip:192.168.1.3 
分解这个ip的词源可以为192,168,1,3 

date:2011-05-10 21:56:37 
分解这次date的词源可以为2011-05-10, 21, 56, 37 

每个词源都可以建立索引 

比如说你查的就是这条url,由于你本条url已经被分词,并且建立了索引, 

也许符合http索引里有900亿,在这900亿里符合www.iteye.com的有10亿,10亿里符合topic/1037635的有103191条,那么这个就是此url的总访问量,如果加上时间的判断就是某段时间段的访问量 

在1000亿条的数据表上对每一个字段,进行分词和建立索引,是一个需要精密排序算法,和也许需要多CPU分布计算处理的过程,建立索引再优化的算法也需要一定的时间,但一旦索引建立好,通过索引的归类排序查询起来就非常的快。 



我不知道楼主是不是深刻理解,索引的真正目的 

在数据上建立索引就是把数据进行归类排序的过程 

比如我公司有100人,我为了快速在员工手册上找到这个人 
我首先要知道这个员工的一些最基本属性,比如姓名,性别,年龄(当然大多就知道个姓名就够了) 

那么我的员工手册的目录就要有几种讲究 

如果 按,性别分为男和女,男员工从第1页到第200页,女员工从第201页到400页 
然后在性别男的结果集中分,20到30岁之间的几页到几页,30到40岁之间的几页到几页 
然后如果我想看一下30到40岁之间的就可以翻到拿一页开始看。 

这里的排版只是个比喻,一般企业都是按职位和部门分排,这样看到那个部门就知道下面有那些员工 

如果我设计了一个索引算法 

有一个人叫张峰,那么把张和峰分开建立索引,那么就会把姓张的或是名字里有张这个字的人全部归类到张这个索引下(当然算法是自己定了,定的时候只要求名字开头第一个字为张的才归类,名字里有张的不算也是可以的),然后名字里有峰的人归到一类。这样就很容易快速找到 

如果归类的数据集比较大,那么在归类的数据集上在归类。这个就是索引上再建立索引, 

所以说为什么索引的建立和修改是需要花大量的计算和时间的 

但最好还是只建立一层索引,多种索引,看到新华字典的编排就是一个典型的例子 

就2种索引,一种按拼音,一种按偏旁,而按偏旁的索引又是一个层次索引,因为找到某个偏旁后,翻到那页还要有一个数笔画确认字的索引。最后你才能确认这个字在具体哪一页。 


总结:索引的目的就是为了最大限度减少查询的次数。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值