Networking 为什么在chord p2p系统中,手指表不';t存储关于其他节点的所有信息?

Networking 为什么在chord p2p系统中,手指表不';t存储关于其他节点的所有信息?,networking,p2p,distributed-system,Networking,P2p,Distributed System,我正在学习和弦系统。但我对它的查询算法有一个疑问。为什么chord中的finger表只存储后继节点(n+2^{i-1})的信息,而不存储环中的所有其他节点?就像在这张照片里 如果我想在节点1搜索键7。如果节点1存储环上所有节点的地址,因为我们显然知道7的后继地址是0,所以可以直接转到0。为什么我要先转到节点6并使用节点6路由到0。我有点困惑。关于可伸缩性。假设环中有10000000个节点。跟踪所有节点变得非常困难(由于内存限制以及发送信号和处理节点加入/离开所需的通信工作) 相反,您可以利用节点

我正在学习和弦系统。但我对它的查询算法有一个疑问。为什么chord中的finger表只存储
后继节点(n+2^{i-1})
的信息,而不存储环中的所有其他节点?就像在这张照片里


如果我想在节点1搜索键7。如果节点1存储环上所有节点的地址,因为我们显然知道7的后继地址是0,所以可以直接转到0。为什么我要先转到节点6并使用节点6路由到0。我有点困惑。

关于可伸缩性。假设环中有10000000个节点。跟踪所有节点变得非常困难(由于内存限制以及发送信号和处理节点加入/离开所需的通信工作)

相反,您可以利用节点ID在环中排序的事实。然后您可以使用它们来避免对整个环进行线性搜索。例如:在节点0中,仅存储关于9个节点的信息(假设ID从0到10000000):1000000、2000000、3000000、。。。900万。然后,如果你想到达一个随机节点,比如1337000,你只需要搜索1000000到2000000段。因此,通过存储有关9个节点的信息,可以将工作量减少10倍

但你可以做得更好。如果节点1000000、1000001等使用与节点0类似的快捷方式,则从1000000到1337000仍然需要大量的工作(337000个步骤)。如果从节点0开始,有9个快捷键以1米的间隔排列,但从节点1米到2米,还有9个快捷键以100k的间隔排列,这不是很好吗?然后您必须在段1300000到1400000中进行查找

您可以让每个节点以10k的间隔为后面的节点维护9个快捷方式,以1k的间隔为后面的节点维护9个快捷方式,以此类推

总之,查找的工作方式如下:

  • 我们向节点0询问节点1337000的信息
  • 节点0不知道如何直接到达节点1337000,但它知道如何到达1000000和2000000。1000000是最近的一个,因此它将查询发送到那里
  • 节点1000000不知道如何直接到达节点1337000,但它知道如何到达1100000、12000000、1300000等。节点1300000是最近的一个,因此它在那里发送查询
  • 节点1300000不知道如何直接到达节点1337000,但它知道如何到达1310000、1320000、1330000等,因此它将查询发送到1330000
  • 节点1330000知道如何到达1337000,因为它在它的finger表中(它知道如何到达1331000、133200、1333000等)
因此,您只需4个步骤即可得到响应。让我们看看手指桌需要多少存储空间

id为n的任何节点都需要存储以下信息:

  • 9个节点,间隔1M,从n开始
  • 9个节点,间隔100k,从n开始
  • 9个节点,间隔10k,从n开始
  • 9个节点,间隔1k,从n开始
  • 9个节点,间隔100,从n开始
  • 9个节点,间隔10,从n开始,我们可以停在这里
因此,每个节点只需要存储关于54个其他节点的信息。在最坏的情况下,需要6+9=15次查找才能到达节点。这比不使用手指表时所需的10M-1查找要好得多

弦使用底端2而不是底端10来分割环。因此,你在论文中看到的是2的幂,而不是10的幂

我不记得这是否就是和弦的工作方式;但这是同样的想法。分布式二进制搜索