Có ai có thể đưa ra lời giải thích về cách thức hoạt động của một DHT không?
Không có gì quá nặng nề, chỉ là những điều cơ bản.
Có ai có thể đưa ra lời giải thích về cách thức hoạt động của một DHT không?
Không có gì quá nặng nề, chỉ là những điều cơ bản.
Câu trả lời:
Ok, về cơ bản chúng là một ý tưởng khá đơn giản. Một DHT cung cấp cho bạn một giao diện giống như từ điển, nhưng các nút được phân phối trên mạng. Thủ thuật với các DHT là nút được lưu trữ một khóa cụ thể được tìm thấy bằng cách băm khóa đó, do đó, trong thực tế, các bảng trong bảng băm của bạn hiện là các nút độc lập trong mạng.
Điều này mang lại rất nhiều khả năng chịu lỗi và độ tin cậy, và có thể có một số lợi ích về hiệu suất, nhưng nó cũng gây ra rất nhiều vấn đề đau đầu. Ví dụ, điều gì xảy ra khi một nút rời khỏi mạng, do lỗi hoặc cách khác? Và làm thế nào để bạn phân phối lại các khóa khi một nút tham gia để tải được cân bằng. Hãy nghĩ về nó, làm thế nào để bạn phân phối đồng đều các phím? Và khi một nút tham gia, làm thế nào để bạn tránh làm lại mọi thứ? (Hãy nhớ rằng bạn phải làm điều này trong một bảng băm bình thường nếu bạn tăng số lượng thùng).
Một ví dụ về DHT đã giải quyết một số vấn đề này là một vòng logic gồm n nút, mỗi nút chịu trách nhiệm cho 1 / n không gian khóa. Khi bạn thêm một nút vào mạng, nó sẽ tìm một vị trí trên vòng để ngồi giữa hai nút khác và chịu trách nhiệm về một số khóa trong các nút anh chị em của nó. Cái hay của phương pháp này là không có nút nào trong vòng bị ảnh hưởng; chỉ có hai nút anh chị em phải phân phối lại khóa.
Ví dụ, giả sử trong vòng ba nút, nút đầu tiên có các khóa 0-10, nút thứ hai 11-20 và thứ ba 21-30. Nếu một nút thứ tư xuất hiện và chèn chính nó giữa các nút 3 và 0 (hãy nhớ rằng chúng đang ở trong một vòng), nó có thể chịu trách nhiệm cho một nửa không gian phím của 3, vì vậy bây giờ nó xử lý 26-30 và nút 3 giao dịch với 21 -25.
Có nhiều cấu trúc lớp phủ khác như cấu trúc này sử dụng định tuyến dựa trên nội dung để tìm đúng nút để lưu trữ khóa. Xác định vị trí khóa trong vòng yêu cầu tìm kiếm vòng một nút tại một thời điểm (trừ khi bạn giữ bảng tra cứu cục bộ, có vấn đề trong một hàng ngàn nút), đó là định tuyến O (n) -hop. Các cấu trúc khác - bao gồm các vòng tăng cường - đảm bảo định tuyến O (log n) -hop và một số yêu cầu định tuyến O (1) -hop với chi phí bảo trì nhiều hơn.
Đọc trang wikipedia, và nếu bạn thực sự muốn biết trong một chút về chiều sâu, hãy khám phá coursepage tại Harvard trong đó có một danh sách đọc khá toàn diện.
Các DHT cung cấp cùng loại giao diện cho người dùng như một hashtable bình thường (tra cứu một giá trị theo khóa), nhưng dữ liệu được phân phối qua một số nút tùy ý được kết nối. Wikipedia có một giới thiệu cơ bản tốt mà về cơ bản tôi sẽ hồi sinh nếu tôi viết nhiều hơn -
Tôi muốn thêm vào câu trả lời hữu ích của HenryR khi tôi có cái nhìn sâu sắc về băm nhất quán. Tra cứu băm bình thường / ngây thơ là một hàm của hai biến, một trong số đó là số lượng xô. Vẻ đẹp của băm nhất quán là chúng ta loại bỏ số lượng xô "n", khỏi phương trình.
Trong băm ngây thơ, biến đầu tiên là khóa của đối tượng được lưu trữ trong bảng. Chúng tôi sẽ gọi khóa "x". Biến thứ hai là số lượng xô, "n". Vì vậy, để xác định thùng / máy nào mà đối tượng được lưu trữ, bạn phải tính: hash (x) mod (n). Do đó, khi bạn thay đổi số lượng thùng, bạn cũng thay đổi địa chỉ mà hầu hết mọi đối tượng được lưu trữ.
So sánh điều này với băm nhất quán. Hãy định nghĩa "R" là phạm vi của hàm băm. R chỉ là một số không đổi. Trong băm nhất quán, địa chỉ của một đối tượng nằm ở hàm băm (x) / R. Vì việc tra cứu của chúng tôi không còn là chức năng của số lượng nhóm, chúng tôi sẽ kết thúc với việc ánh xạ lại ít hơn khi chúng tôi thay đổi số lượng nhóm.
hash(x)/R
cung cấp cho bạn 34500. Bạn vẫn cần phải làm 34500% 3 .