Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 将URL用作数据库密钥的最佳实践_Http_Database Design_Url_Url Shortener - Fatal编程技术网

Http 将URL用作数据库密钥的最佳实践

Http 将URL用作数据库密钥的最佳实践,http,database-design,url,url-shortener,Http,Database Design,Url,Url Shortener,我将编写一个爬虫程序,将结果存储在数据库(MongoDB)中 当然,使用URL作为一个可能的查询参数是很重要的。但是,这也有问题: URL可以很长,而MongDB有一个有限的最大密钥长度 有很多内容同义词,你不知道这一点,只要抓取一页 如何处理HTTP 301、302、303、307等。存储原始URL或新位置?这对于链接缩短者来说尤其是一个问题 “最后一个.fm”问题。lastfm.com==last.fm~=lastfm.it(等),并且该站点没有使用30倍的结果代码来表示。它只提供来自多个

我将编写一个爬虫程序,将结果存储在数据库(MongoDB)中

当然,使用URL作为一个可能的查询参数是很重要的。但是,这也有问题:

  • URL可以很长,而MongDB有一个有限的最大密钥长度
  • 有很多内容同义词,你不知道这一点,只要抓取一页
  • 如何处理HTTP 301、302、303、307等。存储原始URL或新位置?这对于链接缩短者来说尤其是一个问题
  • “最后一个.fm”问题。lastfm.com==last.fm~=lastfm.it(等),并且该站点没有使用30倍的结果代码来表示。它只提供来自多个域的内容
此数据库的目标:

  • 给定数据库中可能存在或不存在的任何URL,让我查询一下,看看我以前是否以合理的准确性对该文档进行过爬网
当然,除了“抓取并存储准确的URL而不担心重复”之外的任何方案都会有一定数量的误报。误报是我认为与之前爬网的URL相同,但实际上不同的URL。

我认为默认情况下,您的密钥可能是1000字节左右。你真的会有比这更大的URL吗?更糟糕的是,我很确定这是一个硬编码常数,你可以改变它

关于你的其他观点:

有很多内容同义词,你不可能只抓取一页就知道这一点。 -嗯?你的意思是说一个网站可能会被复制,只是围绕着关键短语的内容有细微的差异,你想避免索引这些内容吗

如何处理HTTP 301、302、303、307等。存储原始URL或新位置?这对于链接缩短者来说尤其是一个问题。 -我会想目的地…如果有人多次缩短了同一个目的地怎么办?如果缩短的链接过期,或者缩短器脱机,该怎么办?我认为,与目标url发生的相同情况相比,这些情况发生的可能性要大得多

“最后一个.fm”问题。lastfm.com==last.fm~=lastfm.it(等),并且该站点没有使用30倍的结果代码来表示。它只提供来自多个域的内容。 -你能写一个简单的算法来检查可能相似的域吗?Last.fm包含lastfm.com中的6/9个字符,前6个字符相同。如果还要存储一些元数据,可以检查具有高度相关性的匹配项是否是相同的文档

对于数据库中可能存在或不存在的任何URL,让我查询一下,看看我以前是否以合理的准确度对该文档进行过爬网。 -见最后一点

希望这有帮助