我正在嘗試編寫代碼,以便它爲每個散列生成唯一的分數。基本上我想要返回同一個節點給多個用戶,如果他們請求相同的內容。爲散列生成唯一分數的最佳方法是什麼
這裏是我的代碼:
import hashlib
#define nodes
nodes = ["192.168.20.2", "192.168.20.3", "192.168.20.4", "192.168.20.5", "192.168.20.6", "192.168.20.7"]
def selectNodes(clientIP,request):
hash_list = []
for node_ips in nodes:
score = 0
ready_hash = str(request) + str(node_ips)
m = hashlib.md5((ready_hash).encode("utf-8"))
hashed_node = m.hexdigest()
for char in hashed_node:
score += int(char, 16)
hash_list.append((node_ips, score))
sorted_by_score = sorted(hash_list, key=lambda tup:tup[1], reverse=True)
(node_ip, score) = sorted_by_score[0]
return (node_ip, sorted_by_score)
如果我稱之爲:
selectNodes("10.10.10.20", "movie1")
假設它返回爲192.168.20.2 MOVIE1。下一次當相同或其他用戶請求「movie1」時。它應該返回同一個節點192.168.20.2。我不想將{電影映射到節點}。它應該在運行時進行計算並給出正確的結果。
上面的代碼對我來說工作得很好,但有時節點的計算得分變得相同。
我該怎麼做才能計算出每個散列的獨特分數。
我不明白你想要做什麼,你的意思是「分數」,或IP列表和IP地址之間的關係傳遞給函數是什麼。你的函數甚至不在任何地方使用'clientIP'。請舉例說明。 – interjay
你可以舉例說明md5是相同的嗎? –
我並不是說哈希值相同,但計算得分相同。這是一個例子>>> selectNodes(「10.10.10.20」,「movie4」) - 輸出 ('192.168.20.2',[('192.168.20.2',287),('192.168.20.5',287) ,('192.168.20.3',274),('192.168.20.7',267),('192.168.20.6',242),('192.168.20.4',226)])。所以我們看到192.168.20.2和192.168.20.5具有相同的計算得分。有沒有什麼邏輯可以計算出獨特的分數。 – Maanish