Koorde
I peer-to-peer- nätverk är Koorde ett distribuerat hashtabellsystem (DHT) baserat på Chord DHT och De Bruijn-grafen ( De Bruijn-sekvensen ). Koorde ärver enkelheten hos Chord och möter O (log n ) hopp per nod (där n är antalet noder i DHT), och hopp per uppslagsbegäran med O (log n ) grannar per nod.
Chord-konceptet är baserat på ett brett spektrum av identifierare (t.ex. 2 160 ) i en struktur av en ring där en identifierare kan stå för både nod och data. Nod-efterträdare är ansvarig för hela skalan av ID:n mellan sig själv och sin föregångare.
De Bruijns grafer
Koorde är baserad på Chord men också på De Bruijn-grafen ( De Bruijn-sekvensen) . I en d -dimensionell de Bruijn-graf finns det 2 d- noder , som var och en har ett unikt ID med d- bitar . Noden med ID i är 2 i mod 2d kopplad till noderna och 2 i + 1 mod 2d . Tack vare denna egenskap routingalgoritmen dirigera till vilken destination som helst i d -hopp genom att successivt "skifta in" bitarna i destinations-ID:t men bara om dimensionerna på avståndet mellan mod 1 d och 3 d är lika.
Att dirigera ett meddelande från nod m till nod k åstadkoms genom att ta talet m och skifta in bitarna av k en i taget tills talet har ersatts av k . Varje skift motsvarar ett dirigeringshopp till nästa mellanliggande adress; hoppet är giltigt eftersom varje nods grannar är de två möjliga resultaten av att flytta en 0 eller 1 till sin egen adress. På grund av strukturen hos de Bruijn-grafer, när den sista biten av k har flyttats, kommer frågan att vara vid nod k . Nod k svarar om nyckel k existerar.
Exempel på routing
Till exempel, när ett meddelande måste dirigeras från nod 2 (som är 010
) till 6 (vilket är 110
), är stegen följande:
- Nod 2 dirigerar meddelandet till Nod 5 (med dess anslutning till 2 i + 1 mod 8 ), flyttar bitarna åt vänster och sätter
1
som den yngsta biten (höger sida). - Nod 5 dirigerar meddelandet till Nod 3 (med dess anslutning till 2 i + 1 mod 8 ), flyttar bitarna åt vänster och sätter
1
som den yngsta biten (höger sida). -
0
Nod 3 dirigerar meddelandet till Nod 6 (med dess anslutning till 2 i mod 8 ), flyttar bitarna åt vänster och lägger som den yngsta biten (höger sida).
Icke-konstant grad Koorde
Den d -dimensionella de Bruijn kan generaliseras till basen k , i vilket fall nod i är ansluten till noderna k • i + j mod kd , 0 ≤ j < k . Diametern reduceras till Θ ( log k n ) . Koordnod i upprätthåller pekare till k på varandra följande noder som börjar vid föregångaren till k • i mod kd . Varje de Bruijn routingsteg kan emuleras med ett förväntat konstant antal meddelanden, så routing använder Θ(log n ) O ( log k n ) förväntade hopp- För k = Θ(log n ) får vi grad och diameter.
Uppslagsalgoritm
funktion n . lookup ( k , shift , i ) { if k ∈ ( n , s ] return ( s ) ; else if i ∈ ( n , s ] return p . lookup ( k , shift << 1 , i ∘ topBit ( shift )) ; else return s . lookup ( k , shift , i ) ; }
Pseudokod för Koorde-uppslagsalgoritmen vid nod n
:
-
k
är nyckeln -
Jag
är den imaginära De Bruijn-noden -
p
är referensen till föregångaren till2n
-
s
är hänvisningen till efterträdaren tilln