登陆

章鱼彩票鱼丸怎么换钱-怎么构建Google查找主动完结功用

admin 2019-12-14 195人围观 ,发现0个评论

每逢您开端在Google上输入查找内容时,您都会取得引荐列表,而且键入的字母越多,引荐的准确性就越高。假如您像我相同,您总是想知道这是怎么作业的-是存储倒排索引仍是其他内容?

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

体系要求

考虑到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”之类的查询。

与章鱼彩票鱼丸怎么换钱-怎么构建Google查找主动完结功用前一种办法比较,这种办法更好,由于读取功率很高。每逢节点的频率更新时,咱们都会从该节点回溯到其父节点,直到抵达根节点停止。关于每个父级,咱们查看当时查询是否是前N个查询的一部分。假如是,则将相应的频率替换为更新的频率。假如不是,则查看当时查询的频率是否足够高以成为前N个查询的一部分。

假如是这样,咱们用频率更新前N个。虽然这种办法有用,但的确会影响咱们的读取功率-每次履行写入/更新操作时,咱们都需求在节点上加一个锁,这样用户就不会得到过期的值,可是假如咱们考虑终究的一致性,则或许没什么大章鱼彩票鱼丸怎么换钱-怎么构建Google查找主动完结功用问题。用户或许会暂时获取过期的值,可是终究它将保持一致。虽然如此,咱们将研讨这种章鱼彩票鱼丸怎么换钱-怎么构建Google查找主动完结功用办法的扩展。

办法3

作为从前办法的扩展,咱们能够离线存储数据。咱们能够将查询的哈希图存储到其频率,章鱼彩票鱼丸怎么换钱-怎么构建Google查找主动完结功用一旦频率到达设置的阈值,便能够将其映射到服务器。

缩放份额

现在,将不会只要一台大型服务器来存储一切PB级数据。咱们会笔直扩展日子–有更好的办法。咱们能够经过前缀在各种服务器章鱼彩票鱼丸怎么换钱-怎么构建Google查找主动完结功用上分发数据(分片)。例如,前缀“ a”,“ aa”,“ aab”等将在服务器#1上等等。咱们能够运用负载均衡器来保存带有服务器编号的前缀映射。

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

假如您忧虑单点毛病,则或许有许多服务器充任负载平衡器,因而,假如任何负载平衡器发作章鱼彩票鱼丸怎么换钱-怎么构建Google查找主动完结功用毛病,则将其替换为另一个。您能够运用ZooKeepers继续运行状况查看负载平衡器并采纳相应的办法。

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP