2010-03-21 28 views
1

我的問題相當複雜,我解釋,因爲我不擅長數學,但我會盡量做到儘可能清楚。python並行計算:分割鍵空間給每個節點一個工作範圍

我試圖在python中編寫一個集羣,它將生成給定字符集(即小寫字母:aaaa,aaab,aaac,...,zzzz)的單詞並對它們進行各種操作。 我正在尋找如何計算,給定字符集和節點數量,每個節點應該工作的範圍(即:node1:aaaa-azzz,node2:baaa-czzz,node3:daaa-ezzz,...) 。是否有可能做出一個算法,可以計算出來,如果是這樣,我怎麼能在Python中實現這個?

我真的不知道該怎麼做,所以任何幫助,將不勝感激

+1

http://en.wikipedia.org/wiki/Distributed_hash_table#Keyspace_partitioning – jfs 2010-03-21 21:08:50

+0

感謝您的提示,我會嘗試着如何現在具體應用這些概念^^ – MatToufoutu 2010-03-21 22:14:57

+0

http://hadoop.apache.org/ – 2010-03-22 03:35:31

回答

1

,你可以計算從串一個小整數將罰款集羣的任何方式。例如,計算與MD5哈希,看看它的一個字節:

import hashlib 

s = "aaac" 
num_nodes = 5 # or whatever 
m = hashlib.md5(s) 
node = ord(m.digest()[0]) % num_nodes 

print node # prints 2 

這並不能保證均勻分佈的所有字符串,但它會很接近。

+0

我不明白如何使用你的代碼片段來知道給每個節點的「單詞範圍」,請問你能更精確嗎? – MatToufoutu 2010-03-21 22:16:34

+0

此代碼不知道有關單詞範圍的任何內容。它需要一個單詞(在示例中),並確定要分配給它的節點號。這個任務不是基於範圍的,它顯然是隨機的。 – 2010-03-21 22:34:06

+0

好吧,那不是我要找的東西,但是非常感謝 – MatToufoutu 2010-03-21 22:42:07

1

你應該能夠把你的話作爲一個奇怪的基地數字。例如,假設您有一個.z作爲您的字符集(26個字符),4個字符的字符串,並且您希望在10臺機器之間分配。然後總共有26^4個字符串,所以每臺機器得到26^4/10個字符串。第一臺機器將得到字符串0到26^4/10,接下來的26^4/10到26^4/5等。

要將數字轉換爲字符串,只需使用您的基數字符集作爲數字。所以0是'aaaa',26^4/10 = 2 * 26^3 + 15 * 26^2 + 15 * 26 +15是'cppp'。

+0

非常感謝,我會看看我是否可以使用此方法做我想做的事 – MatToufoutu 2010-03-22 10:22:02

相關問題