热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

大数据学习笔记·互联网搜索中的大数据

大规模网络搜索的设计大规模搜索引擎的逻辑结构上图来自1998年Google两个创始人发表的论文。crawler:爬虫,从互联网上获取文档信息index:读取这些信息,并记

大规模网络搜索的设计

大规模搜索引擎的逻辑结构


上图来自1998年Google两个创始人发表的论文。

  1. crawler:爬虫,从互联网上获取文档信息
  2. index:读取这些信息,并记住哪些单词出现在哪些文档中,称为索引
  3. search:使关键词查询成为可能,并对查询结果进行排序
  4. Google的独特性在于:使用anchor text描述目标文档,并利用文档之间的链接对文档的重要性排序,这就是PageRank。

Google搜索的主要数据结构

  • 将大文件设计为虚拟文件
  • 每个页面有三个描述维度:

    1. sync同步码:一个页面数据长度的开始
    2. length:页面字节长度
    3. compressed packet:压缩包,包括docid(文档id)、ecode(编码信息)、url长度、页面长度和页面

索引

  1. 根据docid排序
  2. 根据URL排序
  3. lexicon:词典,是一个查找表。保存在内存中,保存单词以及由指针组成的哈希表。

  • 正向索引,如你们所知,barrels会记录文档ID(docID)、单词ID(wordID)和文档中的每个词出现了多少次。在索引末尾,会有所有出现和所有命中。
  • 倒排索引,包含与正向索引相似的信息。但是,倒排索引中的信息排列方式不同于正向索引中,倒排索引中的信息是根据单词排序的。因此,如你们所知,单词ID之后跟随着有多少文档中包含了这个单词。然后一些指向这些文档的指针。对于每个文档,倒排索引都会记录在这个文档中命中了多少次。在索引末尾还有命中的列表。

命中

关键字出现在一个页面中称为“Hit(命中)”。Google的Hit存储了命中的类型和位置。
命中分为特殊命中和普通命中。特殊命中是指关键词在标题、URL、元数据和锚文本中命中。

爬虫


网络爬取信息是一个复杂的工作,需要用到分布式爬取、DNS缓存等提高爬取效率。

搜索


一个搜索请求的处理步骤:

  1. 查询请求解析
  2. 将单词转换为wordIDs。
  3. 对短桶中的每个单词都转到文档列表的开始并获得所有文档列表
  4. 搜索引擎对每个查询请求计算文档排序
  5. 返回排序得分最高的搜索结果

搜索引擎是怎么样在一秒钟之内处理数千次查询请求的?

在现实中,一个商业搜索引擎包括许多集群,每个集群都是一个完整的大规模搜索引擎,会存储所有Web页面。并能够提处理各种查询请求。当用户输入了一个查询时,先由一个基于域名服务的负载均衡系统分配至一个集群。分配时要同时考虑用户与物理集群的距离和可用能力。

这些集群分布在世界各地,它们可能位于不同的城市和不同的国家。对于每个查询请求,只有一个HTTP请求被发送到一个集群上去。现在我们可以计算一下,如果我们的目标是4,000次查询请求每秒。哇!如此之多,但是我们有10个集群,每个集群实际上需要在每秒钟处理400次查询请求。

让我们来看看当一个查询请求到来时,一个集群内部是什么样子的。

  • 首先,基于硬件的负载均衡器会把这个查询请求分配给某台Web服务器。

  • 然后, 每台Web服务器上都有搜索引擎缓存。如果这个查询请求之前被搜索和缓存过,那么搜索引擎缓存将马上返回搜索结果。

因此,我们的目标是每秒处理400次查询请求,如果其中80%的查询请求都使用缓存中的结果,那么我们只需要在每秒钟处理80次查询请求就可以了。
另外,索引服务器也有很多副本,所以假设每台索引服务器都有3个副本,那么每台索引服务器每秒只需要处理20次查询请求。

这张幻灯片展示的是谷歌的查询服务器的架构。

  • 因此,当一个查询请求到来时,谷歌的Web服务器会把这个查询请求发送给一些索引服务器并从索引服务器获得搜索结果列表。如有需要访问文档信息,那么索引服务器会把请求分配给某个文档服务器并获得所需的文档。

搜索引擎还有一个称为拼写检查的模块,这是因为在查询词中经常会存在一些原始错误。如果这些原始错误能够被更正,那么搜索结果就会更好。在索引服务器内部,你们可以看到你们所熟知的倒排索引,我们在第一部分介绍了倒排索引。

例如,让一个查询请求到来时,查询请求包含t1和t2两个词,这两个词汇被发送给索引服务器,索引服务器会从倒排索引中分别获取第一个词的倒序排列表和第二个词的倒序排列表。然后某个模块会合并这两个倒序排列表并为每个文档计算一个相关性分数。

  • 最后,搜索引擎返回得分最高的K个文档的文档ID。

现在,我们的目标是让每个索引服务器在每秒钟返回27次查询请求。现在,这个数字并不是很大了。非常幸运,我们还有一些优化性能的方法。例如,我们可以使用动态剪枝算法来计算得分最高的K个文档。这就是说,我们不需要对包含t1和t2的所有文档进行全排序,我们只需要得分最高的K个文档。通常来说,K的取值是10。因此,这样我们就可以做得更好了。当我们为每个查询词加载到排表时,我们能够计算倒序排列表的相交部分,对每个文档进行评估并根据相关性得分排序。

参考文献:
[1] S. Brin and L .Page. The anatomy of a large-scale hypertextual web search engine In Proceedings of the Seventh International World Wide Web Conference, 1998
[2] A. Barroso, J. Dean and U. Hlzle. Web Search for a Planet: The Google Cluster Architecture IEEE Micro, 2003
[3] Sanjay Ghemawat, Howard Gobioff and and Shun-Tak Leung. The Google File System. SOSP’03, 2003
[4] J Dean and S Ghemawat. MapReduce: Simplified Data Processing on Large Clusters. 00104, 2004

探寻搜索的多个维度

//TODO


推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文讨论了如何在不使用SearchBar display controller的情况下,单独使用SearchBar并捕获其textChange事件。作者介绍了实际状况,即左侧SliderMenu中的SearchBar需要在主页TableView中显示搜索结果。然后,作者提供了解决方案和步骤,帮助读者实现这一功能。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 前端性能优化无损压缩webp格式的图片
    一、什么是webpWebP格式,谷歌开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的23,并能节省大量的服务器宽带资源和数据空 ... [详细]
author-avatar
王欣纶淑玲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有