ใครช่วยอธิบายวิธีการทำงานของ DHT ได้บ้าง?
ไม่มีอะไรหนักเกินไปเพียงแค่พื้นฐาน
ใครช่วยอธิบายวิธีการทำงานของ DHT ได้บ้าง?
ไม่มีอะไรหนักเกินไปเพียงแค่พื้นฐาน
คำตอบ:
ตกลงพวกเขาเป็นแนวคิดพื้นฐานที่ค่อนข้างง่าย 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 ซึ่งมีรายการเรื่องการอ่านที่ครอบคลุม
DHT จัดเตรียมอินเทอร์เฟซชนิดเดียวกันให้กับผู้ใช้เป็น hashtable ปกติ (ค้นหาค่าด้วยรหัส) แต่ข้อมูลจะถูกกระจายไปตามจำนวนโหนดที่เชื่อมต่อโดยพลการ วิกิพีเดียมีการแนะนำขั้นพื้นฐานที่ดีว่าฉันจะสำรอกถ้าฉันเขียนเพิ่มเติม -
ฉันต้องการเพิ่มคำตอบที่เป็นประโยชน์ของ HenryR เนื่องจากฉันเพิ่งได้รับข้อมูลเชิงลึกเกี่ยวกับการแปลงแป้นพิมพ์ที่สอดคล้องกัน การค้นหาแฮชธรรมดา / ไร้เดียงสาเป็นฟังก์ชันของตัวแปรสองตัวซึ่งหนึ่งในนั้นคือจำนวนของที่เก็บข้อมูล ความงามของการบีบอัดอย่างสม่ำเสมอคือเรากำจัดจำนวนถัง "n" ออกจากสมการ
ใน hashing ไร้เดียงสาตัวแปรแรกคือกุญแจสำคัญของวัตถุที่จะเก็บไว้ในตาราง เราจะเรียกปุ่ม "x" ตัวแปรที่สองคือจำนวนของถัง "n" ดังนั้นในการพิจารณาว่าถัง / เครื่องจักรใดที่วัตถุถูกเก็บไว้คุณต้องคำนวณ: hash (x) mod (n) ดังนั้นเมื่อคุณเปลี่ยนจำนวนที่เก็บคุณยังเปลี่ยนที่อยู่ที่จัดเก็บวัตถุเกือบทุกชิ้น
เปรียบเทียบสิ่งนี้กับ hashing ที่สอดคล้องกัน ลองกำหนด "R" เป็นช่วงของฟังก์ชันแฮช R เป็นค่าคงที่บางส่วน ในการแฮชที่สอดคล้องกันที่อยู่ของวัตถุจะอยู่ที่ hash (x) / R เนื่องจากการค้นหาของเราไม่มีฟังก์ชั่นจำนวนถังอีกต่อไปเราจึงจบลงด้วยการแมปอีกครั้งน้อยเมื่อเราเปลี่ยนจำนวนถัง
hash(x)/R
ช่วยให้คุณ 34500. คุณยังคงต้องทำ 34500% 3