คำอธิบายพื้นฐานอย่างง่ายของตารางแฮชแบบกระจาย (DHT)


177

ใครช่วยอธิบายวิธีการทำงานของ DHT ได้บ้าง?

ไม่มีอะไรหนักเกินไปเพียงแค่พื้นฐาน

คำตอบ:


237

ตกลงพวกเขาเป็นแนวคิดพื้นฐานที่ค่อนข้างง่าย DHT ให้อินเทอร์เฟซเหมือนพจนานุกรมให้คุณ แต่มีการกระจายโหนดผ่านเครือข่าย เคล็ดลับกับ DHTs คือโหนดที่ได้รับการจัดเก็บคีย์เฉพาะพบได้โดยการกดแป้นนั้นดังนั้นในกรณีที่ถังแฮชตารางของคุณตอนนี้เป็นโหนดอิสระในเครือข่าย

สิ่งนี้ให้การยอมรับข้อผิดพลาดและความน่าเชื่อถือได้เป็นอย่างมากและอาจเป็นผลดีต่อประสิทธิภาพการทำงานบางอย่าง แต่ก็ทำให้ปวดหัวมากขึ้น ตัวอย่างเช่นเกิดอะไรขึ้นเมื่อโหนดออกจากเครือข่ายโดยล้มเหลวหรืออย่างอื่น? และคุณจะแจกจ่ายคีย์อย่างไรเมื่อโหนดรวมกันเพื่อให้โหลดมีความสมดุลโดยประมาณ ลองคิดดูสิคุณจะกระจายกุญแจอย่างสม่ำเสมออย่างไร? และเมื่อมีการเชื่อมต่อโหนดคุณจะหลีกเลี่ยงการปรับปรุงทุกอย่างได้อย่างไร (จำไว้ว่าคุณต้องทำเช่นนี้ในตารางแฮชปกติถ้าคุณเพิ่มจำนวนที่เก็บข้อมูล)

ตัวอย่างหนึ่งของ DHT ที่จัดการกับปัญหาเหล่านี้คือตรรกะวงแหวนของโหนด n แต่ละอันรับผิดชอบ 1 / n ของ keyspace เมื่อคุณเพิ่มโหนดในเครือข่ายจะพบสถานที่บนวงแหวนเพื่อนั่งระหว่างสองโหนดอื่น ๆ และรับผิดชอบบางส่วนของคีย์ในโหนด sibling ความสวยงามของวิธีการนี้คือไม่มีโหนดอื่นใดในวงแหวนที่ได้รับผลกระทบ มีเพียงโหนด sibling สองโหนดเท่านั้นที่ต้องแจกจ่ายคีย์อีกครั้ง

ตัวอย่างเช่นพูดในสามโหนดดังขึ้นที่โหนดแรกมีคีย์ 0-10, 11-20 ที่สองและ 21-30 ที่สาม หากโหนดที่สี่เข้ามาและแทรกตัวระหว่างโหนด 3 และ 0 (โปรดจำไว้ว่าพวกมันอยู่ในวงแหวน) มันสามารถรับผิดชอบได้ว่าครึ่งหนึ่งของคีย์สเปซของ 3 ดังนั้นตอนนี้มันเกี่ยวข้องกับ 26-30 และโหนด 3 กับ 21 -25

มีโครงสร้างการซ้อนทับอื่น ๆ มากมายเช่นนี้ที่ใช้การกำหนดเส้นทางตามเนื้อหาเพื่อค้นหาโหนดที่ถูกต้องในการจัดเก็บคีย์ การค้นหาคีย์ในริงต้องค้นหารอบริงครั้งละหนึ่งโหนด (ยกเว้นว่าคุณเก็บตารางการค้นหาแบบโลคัลปัญหาใน DHT ของหลายพันโหนด) ซึ่งเป็นการจัดเส้นทาง O (n) -hop โครงสร้างอื่น ๆ - รวมถึงวงแหวนที่เพิ่มขึ้น - รับประกันการกำหนดเส้นทาง O (log n) -hop และการอ้างสิทธิ์ O (1) - การกำหนดเส้นทาง hop ในราคาการบำรุงรักษาที่มากขึ้น

อ่านหน้าวิกิพีเดียและหากคุณต้องการทราบในเชิงลึกสักหน่อยลองดูบทเรียนที่ Harvard ซึ่งมีรายการเรื่องการอ่านที่ครอบคลุม


23
+1 คำตอบที่ดี สิ่งที่คุณหมายถึงในวรรคที่สาม ("หนึ่งตัวอย่าง DHT ที่จัดการกับปัญหาเหล่านี้บางอย่างเป็นแหวนตรรกะของโหน n") เป็น Hashing ที่สอดคล้องกัน เป็นหัวข้อที่น่าสนใจมากที่ใช้ใน Apache Cassandra ฐานข้อมูลแบบกระจายที่สร้างโดย Facebook ลิงก์ไปที่กระดาษ (ควรอ่าน): cs.cornell.edu/projects/ladis2009/papers/lakshman-ladis2009.pdf
santiagobasulto

5
โปรโตคอลการค้นหาแบบแหวนที่เข้าใจได้ง่ายคือ Chord: pdos.csail.mit.edu/papers/chord:sigcomm01
ThomasWeiss

คุณช่วยอธิบายรายละเอียดเกี่ยวกับวิธีเก็บคีย์ - ค่าบนโหนดได้หรือไม่? มันจะเป็นรูปแบบของตารางแฮชหรือฐานข้อมูลหรือไม่?
Wand Maker

@ HenryR ไม่ใช่ "node ring" เป็นเพียงโครงสร้างต้นไม้ใช่ไหม
Pacerier

ยูนิอิลลินอยส์สอนโปรโตคอลคอร์ดทุกภาคการศึกษาเป็นส่วนหนึ่งของการเรียนระบบของพวกเขากระจายหากใครต้องการวัสดุการอ่านมากขึ้น - courses.engr.illinois.edu/ece428/sp2018/lectures.html
Siddhartha

11

DHT จัดเตรียมอินเทอร์เฟซชนิดเดียวกันให้กับผู้ใช้เป็น hashtable ปกติ (ค้นหาค่าด้วยรหัส) แต่ข้อมูลจะถูกกระจายไปตามจำนวนโหนดที่เชื่อมต่อโดยพลการ วิกิพีเดียมีการแนะนำขั้นพื้นฐานที่ดีว่าฉันจะสำรอกถ้าฉันเขียนเพิ่มเติม -

http://en.wikipedia.org/wiki/Distributed_hash_table


7

ฉันต้องการเพิ่มคำตอบที่เป็นประโยชน์ของ HenryR เนื่องจากฉันเพิ่งได้รับข้อมูลเชิงลึกเกี่ยวกับการแปลงแป้นพิมพ์ที่สอดคล้องกัน การค้นหาแฮชธรรมดา / ไร้เดียงสาเป็นฟังก์ชันของตัวแปรสองตัวซึ่งหนึ่งในนั้นคือจำนวนของที่เก็บข้อมูล ความงามของการบีบอัดอย่างสม่ำเสมอคือเรากำจัดจำนวนถัง "n" ออกจากสมการ

ใน hashing ไร้เดียงสาตัวแปรแรกคือกุญแจสำคัญของวัตถุที่จะเก็บไว้ในตาราง เราจะเรียกปุ่ม "x" ตัวแปรที่สองคือจำนวนของถัง "n" ดังนั้นในการพิจารณาว่าถัง / เครื่องจักรใดที่วัตถุถูกเก็บไว้คุณต้องคำนวณ: hash (x) mod (n) ดังนั้นเมื่อคุณเปลี่ยนจำนวนที่เก็บคุณยังเปลี่ยนที่อยู่ที่จัดเก็บวัตถุเกือบทุกชิ้น

เปรียบเทียบสิ่งนี้กับ hashing ที่สอดคล้องกัน ลองกำหนด "R" เป็นช่วงของฟังก์ชันแฮช R เป็นค่าคงที่บางส่วน ในการแฮชที่สอดคล้องกันที่อยู่ของวัตถุจะอยู่ที่ hash (x) / R เนื่องจากการค้นหาของเราไม่มีฟังก์ชั่นจำนวนถังอีกต่อไปเราจึงจบลงด้วยการแมปอีกครั้งน้อยเมื่อเราเปลี่ยนจำนวนถัง

http://michaelnielsen.org/blog/consistent-hashing/


1
คุณยังต้องการแก้ไขหรือไม่ สมมติว่าคุณมี 3 เซิร์ฟเวอร์ hash(x)/Rช่วยให้คุณ 34500. คุณยังคงต้องทำ 34500% 3
Pacerier

บล็อกโพสต์ของคุณไม่ชัดเจนคุณควรแสดงรายการสแนปชอตทีละขั้นตอนของตัวอย่างการทำงานที่มีการเพิ่มและลบโหนดพร้อมกับแถวที่เพิ่มและลบออก
Pacerier
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.