散列(hash)也就是哈希,是信息存储和查询所用的一项基本技术。在搜索引擎中网络爬虫在抓取网页时为了对网页进行有效地排重必须对URL进行散列,这样才能快速地排除已经抓取过的网页。最理想的状态是对联网上所有的网页都分配一个哈希地址,可想而知这是一个相当宠大的数字,但实际上往往是无法做到这一点。虽然google、百度都是采用分布式的机群进行哈希排重,但实际上也是做不到所有的网页都分配一个唯一散列地址。但是可以通过多级哈希来尽可能地解决,但却要会出时间代价在解决哈希冲突问题。所以这是一个空间和时间相互制约的问题,我们知道哈希地址空间如果足够大可以大大减少冲突次数,所以可以通过多台机器将哈希表根据一定的特征局部化,分散开来,每一台机器都是管理一个局部的散列地址。

一般情况下所有哈希函数,如果其原始字符串很相似则哈希地址冲突的几率就加大,所以同一个网站下的网页URL冲突的几率也就很大,特别是那些带参数的动态网页URL。所以我可以将原始的URL进行一次标准化处理后再做哈希这样就会有很大的改善,本人通过大量的实验发现先对URL进行一次MD5的加密,然后再对加密后的这个串再哈希这样大大提高了哈希的效率。下面是一些实验结果。(100网页地址空间,而10万的网页URL)。

方法 URL长度(20个字符) URL长度(128个字符)
直接哈希 6000多次 8万多次
MD5后再哈希 少于500次 少于500次

可见URL长度越长直接哈希其冲突率越高,因为其哈希值过于集中。而采用MD5再哈希的方法明显对散列地址起到了一个均匀发布的作用。

搜索引擎中的URL散列相关推荐

  1. url散列算法原理_如何列出与网站相关的所有URL

    url散列算法原理 by Ty Irvine 由Ty Irvine 如何列出与网站相关的所有URL (How to List Out All URLs Associated With a Websit ...

  2. python黑客代码_[翻译]Python开发中的密码散列(Hashing)

    [翻译]Python开发中的密码散列(Hashing) 杀戮 (乌云安全实验室的杂役) | 2015-01-04 23:17 去年7月的一篇小文,看着还不错,就翻译了,当然还是我自己的语气,对于文中的 ...

  3. HashMap中提到的散列是什么?

    一)散列的基本概念 散列方法的主要思想是根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将结点 ...

  4. 【PAT笔记】PAT中的散列思想

    散列的介绍 散列(hash)是常用的算法思想之一,在很多程序上都会有意无意的使用到.用一句话来概括散列思想的话就是:"将元素通过一个函数转换为整数,使得该整数可以尽量唯一地代表这个元素&qu ...

  5. HashMap中计算散列位置时,用与运算代替取模运算的原理

    Java 中 HashMap 计算散列值函数如下: static final int hash(Object obj) {int i;return obj != null ? (i = obj.has ...

  6. 散列查找 散列表(哈希表)

    哈希表的平均查找长度是()的函数. A.哈希表的长度 B.哈希表的装填因子 C.哈希函数 D.表中元素的多少 装填因子 = 关键字个数 / 表长 符号表:是 "名字(Name)–属性(Att ...

  7. 选择Java密码算法第1部分-散列

    抽象 这是涵盖Java加密算法的三部分博客系列的第1部分. 本系列介绍如何实现以下目标: 使用SHA–512散列 使用AES–256的单密钥对称加密 使用RSA–4096的公钥/私钥非对称加密 这第一 ...

  8. java 散列集_java数据结构之散列集HashSet与散列表Hashtable

    java数据结构之散列集HashSet与散列表Hashtable 1.散列集HashSet HashSet类在java.util包中 A.构造方法:HashSet() B.常用方法 public bo ...

  9. c#加密:二、散列法 MD5、SHA256、SHA512

    散列法提供了一种单向加密的方式.这种方式非常适用于在数据库中存储密码.因为我们无须(也不希望)提供解密的信息.在登录验证时,只需简单地将用户的输入进行散列,并和数据库中存储的散列值进行比较即可. 由于 ...

最新文章

  1. 数据分层/ODS/DW/DM
  2. Matlab | 用Matlab写一首歌送给女朋友——程序员必备撩妹技能(Matlab源码)
  3. windows 环境 docker踩坑
  4. Eclipse批量替换
  5. [osg][原创]osg多屏幕显示,会出现透明需要设置的问题
  6. [转]android sqlite db-journal文件产生原因及说明
  7. Android Framework内核之旅
  8. vue routes路由
  9. 基金境外设立子公司将迎新规 监管给出24个月过渡期
  10. 北京二环内详细矢量地图(MapInfo格式)
  11. CxImage 使用报错解决办法
  12. WIN10环境下VS2003的安装
  13. deepin深度系统下安装QQ音乐
  14. 小象学院-人工智能机器学习
  15. 小米微信自动加好友appium
  16. 【报告分享】潮流涌动下的追潮众生与消费洞察-阿里妈妈.pdf(附下载链接)...
  17. IPC-7351 LPWizard使用简要说明
  18. 实现https请求之旅
  19. 数据结构课程设计之区块链工作原理模拟设计
  20. java中isprime_java:19:找不到符号 符号:方法isPrime(int) 位置:类ziji_9

热门文章

  1. 拥抱AI技术,赋能智慧工业
  2. Tensor VS NumPy
  3. Python+OpenCV图像处理实验
  4. php常用的搜索引擎,常用搜索引擎高级命令有哪些
  5. 让VSCode的快捷键切换为WebStorm/IDEA的快捷键、修改颜色主题(深色模式)、文件图标主题
  6. sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
  7. Ubuntu 12.04 64bit或者CentOS 6.3 64bit上搭建OpenRTMFP/Cumulus服务器
  8. uboot引导kernel - 3 -uboot给内核传参详解
  9. Linux下程序崩溃dump时的 core文件的使用方法
  10. java基础编程题(2)