簡體   English   中英

在伏地魔中,為什么哈希環只擴展到2 ^ 31-1?

[英]In Voldemort, why does the hash ring only extend to 2^31-1?

在項目voldemort設計頁面上:

http://project-voldemort.com/design.php

據說散列環覆蓋了間隔[0,2 ^ 31-1]。

現在,間隔[0,2 ^ 31-1]表示2 ^ 31個總數,而最大的數字2 ^ 31-1只是將31位都設置為1。(為使自己信服,請考慮2 ^ 3- 1. 2 ^ 3 = 8且為0x1000。2 ^ 3-1 = 7且為0x111)。

因此,如果使用普通的32位地址字存儲該值,則您有1位可用空間。

因此, 為什么2 ^ 31-1是上限? 那多余的錢用於某種系統簿記嗎?

(例如,額外的1位將為安全地添加兩個有效的哈希地址而不會溢出提供空間)。

最后,這種選擇是特定於voldemort的,還是在其他一致的哈希方案中看到的?

我認為您只有1位可用空間,而不是2位。-1表示以下事實:它以數字“ 0”而不是1開頭(相同的原因是循環從0到count-1)。 我猜他們使用2 ^ 31而不是2 ^ 32的原因是他們使用有符號整數,因此最后一位是符號位,因此不可用。

編輯:從您鏈接的頁面:

為了可視化一致的哈希方法,我們可以將可能的整數哈希值看成是一個從0開始到2 ^ 31-1的圓環。

它指定一個整數,因此除非希望使用負的哈希值,否則將使用2 ^ 31而不是2 ^ 32。

遲到了四年,回答一個問題就來了:)

原因是Voldemort用Java編寫,而Java沒有unsigned int。 對於分區,2 ^ 31已經很高。 通常,我們建議僅在數千個分區上運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM