具有不同实现的循环 DHT

Circular DHT with different implementations

我在考试中遇到了以下问题:

此问题涉及循环 DHT,其中每个对等节点仅跟踪其前任和后继节点。没有捷径可用。 考虑以下三个结构。在所有这三种构造中,节点 ID 范围 从 0 到 N-1,密钥 ID 也是如此。在给定时间,参与的对等节点的数量 DHT 是 M 并且这个数字很容易为所有对等节点所知。 (键,值)中的“值” pair 是独立存储感兴趣数据的节点的 ID 集。

C-1:每个存储的(键,值)对(k,v)都存储在一个随机节点(从当时在线的节点中)。

C-2:每个存储的(键,值)对(k,v)存储在一个节点,其ID由k给出mod M.

C-3:每个存储的(键,值)对(k,v)都存储在ID为k的节点(如果它在线)或其最接近的在线后继者(带环绕)。

(a) 一个在线peer想找出一个key k得到对应的value。是什么 在这三种结构中的每一种中,该操作的复杂性(即大 oh O(·))。如果你是 不熟悉 O( ) 表示法,仅说明发起的平均查询数。

(b) 在线节点发起对密钥 k 的查询并在 return 中获取一组两个节点 ID。 这些节点中至少有一个在线的机会是多少(这样查询节点可以得到 感兴趣的数据)?为每个构造提供你的答案;你的答案可能是 k、M、N 或任何其他参数。

(c) 如果在 平均 30% 的节点在线。

我对我写的答案感到困惑。我想知道我所做的是否正确。 我写了以下答案:

a) C1: O(N) - 在有N个节点在线的情况下

C2: O(M) - 如果键是从 0 到 M-1

C3:O(1) - 最坏情况下密钥为 k 的节点离线,下一个被查看

b) p=在线概率

C1: 2C1 * p * (1-p) + 2C2 * p

C2: 2C1 * p * (1-p) + 2C2 * p

C3: 2C1 * p * (1-p) + 2C2 * p

c) C1 : 2C1 * 0.3 * 0.7 + 2C2 * 0.3

C2 : 2C1 * 0.3 * 0.7 + 2C2 * 0.3

C3 : 2C1 * 0.3 * 0.7 + 2C2 * 0.3

a) 对于 C1,您已经陈述了 M = N 情况下的答案,这可能并不总是成立,因此您应该将其更改为 O(M),因为它将搜索所有在线节点作为其中任何一个节点可以随意拿钥匙

C2:O(M)正确,你说的原因也是如此。

C3:这也是 O(M),因为平均而言,您将不得不遍历整个 DHT 才能找到密钥。

b) 您对二项式定理使用了错误的公式。 正确的公式是:

nCk * p^k * (1-p) ^ (n-k)

所以你的答案应该是:

C1: 2C1 * p * (1-p) + 2C2 * p^2

C2: 2C1 * p * (1-p) + 2C2 * p^2

C3: 2C1 * p * (1-p) + 2C2 * p^2

另外,注意这里p = M/N(因为M个节点在线来自N个节点)

c) 现在 p = 0.3

C1 : 2C1 * 0.3 * 0.7 + 2C2 * 0.3^2 = 0.51

C2 : 2C1 * 0.3 * 0.7 + 2C2 * 0.3^2 = 0.51

C3 : 2C1 * 0.3 * 0.7 + 2C2 * 0.3^2 = 0.51