Herhangi biri bir DHT'nin nasıl çalıştığı hakkında bir açıklama yapabilir mi?
Çok ağır bir şey yok, sadece temeller.
Herhangi biri bir DHT'nin nasıl çalıştığı hakkında bir açıklama yapabilir mi?
Çok ağır bir şey yok, sadece temeller.
Yanıtlar:
Tamam, temelde oldukça basit bir fikir. Bir DHT size sözlük benzeri bir arayüz sağlar, ancak düğümler ağ üzerinde dağıtılır. DHT'lerle ilgili hile, belirli bir anahtarı saklamak için kullanılan düğümün, bu anahtarı çektirerek bulunmasıdır, bu nedenle aslında karma tablo kovalarınız artık bir ağdaki bağımsız düğümlerdir.
Bu, çok fazla hataya dayanıklılık ve güvenilirlik ve muhtemelen bazı performans faydaları sağlar, ancak aynı zamanda çok fazla baş ağrısına neden olur. Örneğin, bir düğüm ağdan ayrılırsa veya başarısız olursa ne olur? Yükün kabaca dengelenmesi için bir düğüm birleştiğinde anahtarları nasıl yeniden dağıtabilirsiniz. Düşünmeye gel, nasıl olsa eşit şekilde anahtarları dağıtmak? Ve bir düğüm birleştiğinde, her şeyi yeniden şekillendirmekten nasıl kaçınırsınız? (Kova sayısını artırırsanız, bunu normal bir karma tabloda yapmanız gerektiğini unutmayın).
Bu sorunlardan bazılarını ele alan örnek bir DHT, her biri anahtar alanının 1 / n'sinden sorumlu olan mantıksal bir düğüm halkasıdır. Ağa bir düğüm eklediğinizde, halkada diğer iki düğüm arasında oturacak bir yer bulur ve kardeş düğümlerindeki bazı anahtarların sorumluluğunu üstlenir. Bu yaklaşımın güzelliği, halkadaki diğer düğümlerin hiçbirinin etkilenmemesidir; yalnızca iki kardeş düğümün anahtarları yeniden dağıtması gerekir.
Örneğin, üç düğüm halkasında birinci düğüm 0-10, ikinci 11-20 ve üçüncü 21-30 tuşlarına sahiptir. Dördüncü bir düğüm gelir ve 3 ve 0 düğümleri arasına yerleştirirse (hatırlayın, bir halkada olduklarını), 3'ün anahtar alanının yarısını söylemek için sorumluluk alabilir, bu yüzden şimdi 26-30 ve düğüm 3 anlaşmaları 21 ile ilgileniyor -25.
Bunun üzerinde, bir anahtarın depolanacağı doğru düğümü bulmak için içerik tabanlı yönlendirme kullanan başka birçok bindirme yapısı vardır. Bir ringde bir anahtarın bulunması, ringin her seferinde bir düğümün aranmasını gerektirir (O (n) -hop yönlendirme olan O (n) -top yönlendirmesi olan yerel bir arama tablosunu tutmuyorsanız, DHT'de binlerce düğümde sorunlu değilseniz. Artırılmış halkalar da dahil olmak üzere diğer yapılar O (log n) -top yönlendirmesini garanti eder ve bazıları daha fazla bakım pahasına O (1) -hop yönlendirmesini talep eder.
Vikipedi sayfasını okuyun ve gerçekten biraz derinlemesine bilmek istiyorsanız, oldukça kapsamlı bir okuma listesine sahip olan Harvard'daki bu ders sayfasına göz atın.
DHT'ler, kullanıcıya normal bir hashtable ile aynı türde bir arayüz sağlar (anahtarla bir değer arayın), ancak veriler isteğe bağlı sayıda bağlı düğüm üzerinden dağıtılır. Vikipedi iyi bir temel girişe sahiptir, daha fazla yazarsam özür dilerim.
Ben tutarlı bir karma hakkında sadece bir fikir vardı HenryR yararlı yanıta eklemek istiyorum. Normal / saf bir karma arama, biri kova sayısı olan iki değişkenin bir fonksiyonudur. Tutarlı karma işleminin güzelliği, "n" kova sayısını denklemden çıkarmamızdır.
Saf karma işleminde, ilk değişken tabloda saklanacak nesnenin anahtarıdır. "X" anahtarını arayacağız. İkinci değişken, kova sayısıdır, "n". Bu nedenle, nesnenin hangi kova / makinede saklandığını belirlemek için şunları hesaplamanız gerekir: karma (x) mod (n). Bu nedenle, bölüm sayısını değiştirdiğinizde, hemen hemen her nesnenin depolandığı adresi de değiştirirsiniz.
Bunu tutarlı karma ile karşılaştırın. "R" yi bir hash fonksiyonu aralığı olarak tanımlayalım. R sadece bir sabittir. Tutarlı karma işleminde, bir nesnenin adresi karma (x) / R konumunda bulunur. Aramamız artık kova sayısının bir işlevi olmadığından, kova sayısını değiştirdiğimizde daha az yeniden eşleme ile sonuçlanıyoruz.
hash(x)/R
34500. verir Hala 34500% 3 yapmak gerekir .