有谁知道如何在多台机器上扩展Trie?假设第一台机器空间不足,我需要从一个非常大的字典中添加更多单词,我可以做些什么来添加更多单词? (我是一名Java思想家,但我相信答案可能与语言无关)。我已经意识到我不能只为每个第一个角色说一台机器,但这并不能真正扩展。
答案 0 :(得分:2)
好的,假设您的两台机器都有相同的可用资源,让我们先看一个更简单的例子:
你如何扩展二叉树?甚至更好 - 一个AVL树?有几个例子可以做到这一点:
(请注意,平衡这样的分布式树将会复杂得多,因为您需要与其他计算机进行通信,并且可能在分布式事务中进行,以便能够同时回答所有请求)
所以,现在一个特里,其中--AFAIR--是一棵树/字母。如果你单词中的字母均匀分布,你可以在一台机器上安装A-M,在另一台机器上安装N-Z。这可能不会起作用,但你肯定能够将它或多或少地分成50/50。
如果您现在想要添加越来越多的计算机,我会保留一个主节点作为负载均衡器并将其分发给子节点,这只需要处理几个字母。例如,您可以拥有节点
假设您的字母A-F的数据与字母S的数据大致相同(实际上可能存在一种语言,其中至少接近最佳分布)
现在如果你在A-F中收到太多字母,你可以把它分成A-D和E-F,例如,没有什么真正改变。问题是如果你在S中收到太多字母。现在你有三种可能性:
您可以修改加载根负载均衡器,以便能够在节点之间指定更复杂的边界,例如您现在拥有节点
这里的数字1可能是最简单,最干净的解决方案,但可能有一些未使用的硬件。如果您可以为节点使用不同的资源,那么带有字母S的小负载平衡器的选项1可能是要走的路。 选项2是一个脏混合,选项3可能是最好的方法,但它使负载均衡器可能复杂且容易出错。
希望这些想法可以帮到你。