Skip to content

Commit

Permalink
feat: chapter 9
Browse files Browse the repository at this point in the history
  • Loading branch information
honkinglin committed Nov 25, 2024
1 parent d3dc93a commit 26ead30
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions docs/grokking/chapter-9.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,17 @@
如果你注意到,我们并没有在每个节点中存储最佳建议及其计数。存储这类信息非常困难,因为Trie是自上而下存储的,在父节点创建之前,子节点尚未生成,因此无法轻松存储它们的引用。为了解决这个问题,我们需要在构建Trie的过程中重新计算所有最佳词条及其计数。

具体而言,每个节点在构建时会计算自己的最佳建议并将其传递给父节点。父节点会合并所有子节点的结果,从而确定自己的最佳建议。

## 5. 规模估算

如果我们构建的服务规模与Google相当,每天可以预期有50亿次搜索,这大约相当于每秒60,000次查询。

由于50亿次查询中会有大量重复项,我们可以假设只有20%的查询是唯一的。如果我们只想索引最热门的50%搜索词条,可以排除很多低频搜索的查询。假设我们需要为1亿个唯一词条构建索引。

**存储估算:** 如果每个查询平均由3个单词组成,并且每个单词的平均长度为5个字符,则平均查询大小为15个字符。假设存储一个字符需要2字节,那么存储一个查询需要30字节。总存储需求为:

1亿个词条 × 30字节 = **3 GB**

考虑到数据量每天可能会增长,同时也会删除一些不再被搜索的词条。如果假设每天有2%的新增查询,并且我们维护过去一年的索引,预计的总存储需求为:

**3 GB + (0.02 × 3 GB × 365 天) = 25 GB**

0 comments on commit 26ead30

Please sign in to comment.