diff --git a/docs/grokking/chapter-9.md b/docs/grokking/chapter-9.md index fa502fd..b0d2021 100644 --- a/docs/grokking/chapter-9.md +++ b/docs/grokking/chapter-9.md @@ -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**