В одноранговых сетях Koorde — это система распределенной хэш-таблицы (DHT), основанная на Chord DHT и графе Де Брейна ( последовательность Де Брейна ). Унаследовав простоту Chord, Koorde соответствует O (log n ) переходов на узел (где n — количество узлов в DHT) и переходов на запрос поиска с O (log n ) соседями на узел.
Концепция Chord основана на широком диапазоне идентификаторов (например, 2 160 ) в структуре кольца , где идентификатор может обозначать как узел, так и данные. Узел-преемник отвечает за весь диапазон идентификаторов между собой и своим предшественником.
Koorde основан на Chord, но также и на графе Де Брейна ( последовательности Де Брейна ). В d -мерном графе Де Брейна есть 2 d узлов , каждый из которых имеет уникальный идентификатор с d битами . Узел с идентификатором i соединен с узлами 2 i mod 2 d и 2 i + 1 mod 2 d . Благодаря этому свойству алгоритм маршрутизации может направлять к любому месту назначения за d переходов, последовательно «сдвигая» биты идентификатора места назначения, но только если размеры расстояния между mod 1 d и 3 d равны.
Маршрутизация сообщения от узла m к узлу k выполняется путем взятия числа m и сдвига битов k по одному за раз, пока число не будет заменено на k . Каждый сдвиг соответствует маршрутному переходу к следующему промежуточному адресу; переход допустим, поскольку соседи каждого узла являются двумя возможными результатами сдвига 0 или 1 на его собственный адрес. Из-за структуры графов де Брейна, когда последний бит k был сдвинут, запрос будет на узле k . Узел k отвечает, существует ли ключ k .
Например, когда сообщение необходимо направить из узла 2 (который является 010
) в узел 6 (который является 110
), шаги следующие:
1
в качестве самого младшего бита (справа).1
качестве самого младшего бита (справа).0
в качестве самого младшего бита (справа).D - мерный де Брейн может быть обобщен до базы k , в этом случае узел i соединен с узлами k • i + j mod kd , 0 ≤ j < k . Диаметр уменьшается до Θ (log k n ) . Узел Koorde i поддерживает указатели на k последовательных узлов, начиная с предшественника k • i mod kd . Каждый шаг маршрутизации де Брейна можно эмулировать с ожидаемым постоянным числом сообщений, поэтому маршрутизация использует O (log k n ) ожидаемых переходов. Для k = Θ(log n ) мы получаем степень Θ(log n ) и диаметр .
функция n.lookup ( k , shift , i ) { если k ∈ ( n , s ] вернуть ( s ) ; иначе если i ∈ ( n , s ] вернуть p.lookup ( k , shift << 1 , i ∘ topBit ( shift ) ) ; иначе вернуть s.lookup ( k , shift , i ) ; }
Псевдокод для алгоритма поиска Koorde в узле n
:
k
это ключI
— воображаемый узел Де Брейнаp
это ссылка на предшественника2n
s
это ссылка на преемникаn