热门标签 | 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


推荐阅读
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在前一篇文章《Hadoop》系列之“踽踽独行”(二)中,我们详细探讨了云计算的核心概念。本章将重点转向物联网技术,全面解析其基本原理、应用场景及未来发展前景。通过深入分析物联网的架构和技术栈,我们将揭示其在智能城市、工业自动化和智能家居等领域的广泛应用潜力。此外,还将讨论物联网面临的挑战,如数据安全和隐私保护等问题,并展望其在未来技术融合中的重要角色。 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • Juval Löwy主张,每个类都应被视为服务,这并非是为了让服务无处不在,而是因为微服务是经过深思熟虑后系统分解的自然结果。在他的设计和构建的系统中,这种理念有助于提高模块化、可维护性和扩展性。通过将每个类视为独立的服务,系统能够更好地应对复杂性,实现更灵活的部署和更高的性能。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
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社区 版权所有