百度面试题——存储和维护URL问题

来源:互联网 发布:王欣 知乎 编辑:程序博客网 时间:2024/06/10 00:10

问题描述:

URL是Uniform Resorce Location的缩写,即统一资源定位符,也就是我们常说的网址,为了便于理解,我们将URL简化成如下形式,以www.baidu.com/s?wd=baidu为例,www.baidu.com称为site, 后面部分称为path,每个URL都有一些属性,例如定长的属性和不定长的属性。

请设计一个系统,要求:

1)存储和维护100亿的URL及其属性

2)实现URL及其属性添加,更新和删除

3)给定一批URL,判断是否在系统中,如果在系统中,需要得到它的信息

4)快速选择出一个站点的所有URL及其属性信息

提示:总体URL数据量巨大,所以有必要把URL得存储及其相关的计算分布在多台机器上完成

解题思路:

该题考察大数据存储以及数据库方面的知识,同时也考察分布式系统(数据库)的知识。

首先,已知URL包含如下信息:site、 path、定长属性和不定长属性,可设计一张表,分别包含如下字段:

site字段:存放URL的site。

path字段:存放URL的path。

定长属性:分配定长(例如char[10])的数据宽度的属性字段。

不定长属性:分配不定长(例如varchar[255])的数据宽度的属性字段。

同时,将字段site建立索引,用以实现快速查找。

考虑到有多台机器来存储URL,因此在各台机器上采用相同数据库来建立同一表项,每台机器存储一部分URL。

1)当探测到URL时,根据哈希来决定当前URL存储的机器编号,其哈希函数可设计为同一段域名相同的URL存放在同一台机器,这样可保证同一site的URL存放在同一节点,方便查询和修改。

2)由于同一site的URL存放在同一台机器上,因此,当一个新URL进入时,首先可通过数据库查询其是否已存在,若不存在则插入。对URL属性的修改也可采用数据库操纵语句来实现。

3)可采用查询语句来实现,对于给定的每一个URL,根据其哈希值到对应节点的数据库中去进行搜索,搜索过程以site和path为条件(其构成URL),直接返回查询结果即可。

4)由于在设计数据库的时候在site上建立了索引,且通过哈希来保证同一site的所有记录都在该机器节点上,因此,只需根据给定的站点来定位其所在的机器节点,然后以site为查询条件,返回所有查询结果即可。