小编And*_*ong的帖子

在分布式系统中存储预先输入建议的字典树的最佳方法是什么?

我一直在阅读一些有关尝试的内容,以及它们如何成为提前设计的良好结构。除了 trie 之外,您通常还有节点的键/值对和预先计算的 top-n 建议,以缩短响应时间。

通常,根据我收集的信息,最好将它们保留在内存中以便快速搜索,例如这个问题中建议的内容:拼字游戏单词查找器:构建特里树,存储特里树,使用特里树?。但是,如果您的 Trie 太大而您必须以某种方式对其进行分片怎么办?(例如,也许是一个大型电子商务网站)。

预先计算建议的键/值对显然可以在键/值存储中实现(保存在内存中,如 memcached/redis 或数据库中,并根据需要水平调用),但是存储的最佳方式是什么如果内存无法容纳的话,会使用 trie 吗?是否应该这样做,或者每个分布式系统都应该在内存中保存部分 trie,同时复制它以使其不会丢失?

或者,可以使用搜索服务(例如 Solr 或 Elasticsearch)来生成搜索建议/自动完成,但我不确定性能是否达到此特定用例的标准。Trie 的优点是您可以根据其结构预先计算前 N 个建议,让搜索服务处理网站上的实际搜索。

我知道有现成的解决方案,但我最感兴趣的是学习如何重新发明轮子,或者如果有人想讨论这个主题,至少可以了解一下最佳实践。

你怎么看?

编辑:我还看到了这篇文章: https: //medium.com/@prefixyteam/how-we-built-prefixy-a-scalable-prefix-search-service-for-powering-autocomplete-c20f98e2eff1,它基本上涵盖了使用使用 Redis 作为跳跃列表的主要数据存储,并使用 mongodb 作为 LRU 前缀。似乎是一个不错的方法,但我仍然想了解是否有其他可行/更好的方法。

database search scalability trie typeahead

14
推荐指数
1
解决办法
6447
查看次数

标签 统计

database ×1

scalability ×1

search ×1

trie ×1

typeahead ×1