问题描述
我一直在阅读一些有关尝试的信息,以及它们如何成为快速输入设计的良好结构。除了特里树,通常还为节点提供键/值对,并预先计算了top-n建议以缩短响应时间。
通常,根据我的收集,理想的情况是将它们保留在内存中以进行快速搜索,例如在此问题中建议的内容:Scrabble word finder: building a trie,storing a trie,using a trie?。但是,如果您的Trie太大而又不得不以某种方式将其分片怎么办? (例如,可能是大型电子商务网站)。
用于预先计算建议的键/值对可以明显地在键/值存储中实现(既可以存储在内存中,如memcached / redis,也可以存储在数据库中,并根据需要水平调用),但是最好的方法是特里存储在内存中的方法?应该完全做到这一点,还是应该将分布式系统的每个部分都保存在内存中,同时还要对其进行复制以免丢失?
或者,可以使用搜索服务(例如Solr或Elasticsearch)来生成搜索建议/自动完成功能,但是我不确定性能是否能满足此特定用例的要求。 Trie的优点是您可以根据其结构预先计算top-N建议,而让搜索服务来处理网站上的实际搜索。
我知道有一些现成的解决方案,但是我最感兴趣的是学习如何重新发明这一方案,或者如果有人想知道的话,至少可以瞥见最佳实践这个主题。
您有什么想法?
编辑:我还看到了这篇文章:https://medium.com/@prefixyteam/how-we-built-prefixy-a-scalable-prefix-search-service-for-powering-autocomplete-c20f98e2eff1,其中基本上涵盖了将Redis用作跳过列表的主要数据存储,其中mongodb用作LRU前缀。看起来不错,但是我仍然想了解是否还有其他可行/更好的方法。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)