您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

如何构建Google搜索自动完成功能

时间:2019-10-15 09:33:04  来源:  作者:

每当您开始在google上输入搜索内容时,您都会获得推荐列表,并且键入的字母越多,推荐的准确性就越高。如果您像我一样,您总是想知道这是如何工作的-是存储倒排索引还是其他内容?

这里适合的数据结构是Trie。

系统要求

考虑到Google的规模,我们需要牢记的因素是延迟,一致性和可用性。一个理想的延迟应该是非常低的,给人/每个信你可以键入改变的建议。接下来,系统需要一直可用。但是,这里可以包含一致性。每次键入内容时,它都会更改以前存储的查询的频率,这会影响建议。此处稍有延迟是可以的,最终的一致性也将起作用。

如何构建Google搜索自动完成功能

 

方法1

特里表示一个单词为树,每个字母为节点,下一个字母为子节点,依此类推。Google还会以Trie的形式存储每个单词/句子。在这里考虑,父节点是“ h”,其子节点是“ a”,然后是“ r”,依此类推。每个节点可以有26个子节点。现在,每个节点还可以存储搜索到的每个字母的频率。

例如,节点“ h”存储搜索频率“ h”,其子节点“ a”存储搜索频率“ ha”,依此类推,现在,如果我们要显示前N条建议,请说键入“ h”,建议应该显示“ harry potter”或“ harry styles”。然后,我们需要将父节点中的所有建议排序到频率的每个级别并进行显示,这意味着扫描数TB的数据,并且因为延迟是我们的目标,所以这种扫描方法将行不通。

方法#2

为了使这种方法更有效,我们可以在每个节点上存储更多数据以及搜索频率。让我们在它下面的子树中的每个节点上存储前N个查询。这意味着节点“ h”将存储“哈里·波特”,“哈雷·戴维森”等查询。如果将树遍历到“ harl”(即键入“ harl”),则节点“ l”将具有诸如“ harley davidson”,“ harley quinn”之类的查询。

与前一种方法相比,这种方法更好,因为读取效率很高。每当节点的频率更新时,我们都会从该节点回溯到其父节点,直到到达根节点为止。对于每个父级,我们检查当前查询是否是前N个查询的一部分。如果是,则将相应的频率替换为更新的频率。如果不是,则检查当前查询的频率是否足够高以成为前N个查询的一部分。

如果是这样,我们用频率更新前N个。尽管这种方法有效,但确实会影响我们的读取效率-每次执行写入/更新操作时,我们都需要在节点上加一个锁,这样用户就不会得到过时的值,但是如果我们考虑最终的一致性,则可能没什么大问题。用户可能会暂时获取过时的值,但是最终它将保持一致。尽管如此,我们将研究这种方法的扩展。

方法3

作为先前方法的扩展,我们可以离线存储数据。我们可以将查询的哈希图存储到其频率,一旦频率达到设置的阈值,便可以将其映射到服务器。

缩放比例

现在,将不会只有一台大型服务器来存储所有PB级数据。我们会垂直扩展生活–有更好的方法。我们可以通过前缀在各种服务器上分发数据(分片)。例如,前缀“ a”,“ aa”,“ aab”等将在服务器#1上等等。我们可以使用负载均衡器来保留带有服务器编号的前缀映射。

但是考虑到这一点,与字母“ a”相比,某些具有“ x”,“ xa”,“ yy”等数据的服务器将具有较少的流量,因此,可以对每个服务器进行阈值检查;如果负载如果流量超过该流量,则可以在其他分片之间分发数据。

如果您担心单点故障,则可能有许多服务器充当负载平衡器,因此,如果任何负载平衡器发生故障,则将其替换为另一个。您可以使用ZooKeepers持续运行状况检查负载平衡器并采取相应的措施。



Tags:Google   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  Tags: Google  点击:(7)  评论:(0)  加入收藏
昨日谷歌宣布,自2022年12月19日开始停止对OnHub的软件支持,OnHub路由器仍将提供Wi-Fi信号,但用户无法用谷歌Home应用程序管理它。无法更新Wi-Fi网络设置、添加额外的Wifi设备或...【详细内容】
2021-12-22  Tags: Google  点击:(5)  评论:(0)  加入收藏
谷歌宣布调整服务费费率,从明年起Google Play上所有付费订阅的抽成将从30%降低到15%。此外,电子书和点播音乐流媒体服务还将有资格享受低至10%的费率。此前,Google Play上的开...【详细内容】
2021-10-28  Tags: Google  点击:(38)  评论:(0)  加入收藏
在过去的时间中,我写了比较多的关于谷歌SEO推广,今天来写写GoogleAds广告账户免费诊断分析。今天我们的主题是:如何借助GoogleAds广告账户免费诊断分析工具,来诊断并优化你的Goo...【详细内容】
2021-10-26  Tags: Google  点击:(43)  评论:(0)  加入收藏
很多人在使用谷歌浏览器时都有多开的需求,但是google浏览器是不支持多开的,只能切换账户。更不要提每个多开的窗口都配置不同的ip了。如果想要实现谷歌浏览器分身单窗口单IP,其...【详细内容】
2021-10-22  Tags: Google  点击:(187)  评论:(0)  加入收藏
Google Play Points 是一项鼓励用户参与 Play 生态系统的奖励计划。特定的开发者将受邀提供对特定应用的 Play Points 促销活动,通过提供更丰厚的奖赏,提升应用的用户留存率...【详细内容】
2021-08-19  Tags: Google  点击:(165)  评论:(0)  加入收藏
1 前言现今互联网上的很多产品、战略决策都由数据驱动,以BulletTech为例,在运营微信公众号时,通过后台数据我们对每篇文章都会进行流量来源、裂变和阅读完关注等重要指标的监控...【详细内容】
2021-08-02  Tags: Google  点击:(95)  评论:(0)  加入收藏
其实各家网络公司巨头都会有自己的机房,国内的腾讯、阿里、京东、百度、华为、小米等等,都会自建数据中心,既是为了方便管理,也是一种自我保护。下面就来欣赏一下谷歌机房的内部...【详细内容】
2021-07-29  Tags: Google  点击:(179)  评论:(0)  加入收藏
这篇文章我们要来谈『搜寻量』这个在SEO、以及关键字广告上都非常基础且重要的指标,在Google关键字广告的关键字规划工具、或一些SEO工具(像是Ahrefs、Ubersuggest)我们都可以...【详细内容】
2021-07-14  Tags: Google  点击:(89)  评论:(0)  加入收藏
最近在工作中遇到了一个场景:要做一个静态的网站,里面的内容是由设计编写的.md格式的内容。设计将编好的文档统一放在常用的Google Drive里面,如下图 然后我需要将这些文档下载...【详细内容】
2021-06-09  Tags: Google  点击:(148)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条