Closest question to this I think.
构造路由表的一种显而易见的方法是简单地维护 文字表。 地图(异或,节点)
Kademlia讨论了“桶”的使用,这些桶由XOR的最高有效位组织。 “存储桶”的实际目的是什么? 当我们只需将“实际” XOR用作地图中的键时,为什么还要搞乱“最长前缀”呢?
显然,地图可能会大2 ^ 160,但是我们可以使用一些试探法来限制地图的大小,而不是实施一些任意的存储桶概念? 在任何情况下(无论是否有存储桶),当搜索一个接近我们被要求查找的nodeId时,我们仍然必须遍历表中的所有节点并对每个节点进行XOR?
我想念什么?
答案 0 :(得分:0)
构造路由表的一种明显方法是简单地维护文字表。地图(异或,节点)
我读到的密钥是xor
,但是xor
是什么? xor
接受两个参数:
distance = xor(hash, peerid)
“存储桶”的实际目的是什么?
k-bukcets可以加快以下python代码的速度:
nsmallest(k, peers, key=functools.partial(operator.xor, hash))
即找到与给定哈希最接近的对等点。
当我们仅将“实际” XOR用作地图中的键时,为什么会与“最长前缀”混为一谈?
就像我说的那样,上面您无法存储所有可能的哈希值的异或值。
当搜索接近我们被要求找到的nodeId时,我们仍然必须遍历表中的所有节点并对每个节点进行XOR?
带有k-bucket的东西不需要遍历整个地图以找到最接近的对等体,因为对等体又名哈希。 peerid
是按前缀组织的,并且您知道最近的对等节点与给定的哈希共享相同的前缀。
为什么要使用存储桶而不是地图?
您可以使用地图代替k-bucket。