我有〜200K命名屬性和〜25K文件。我使用Python提取每個文件的屬性是否保持爲一組屬性,每個文件一組。哈希+映射或索引+映射來濃縮使用字符串
要做到這一點,我可能會並行地在計算場上運行數百個單獨的Python提取腳本。每個文件都留下一些表示提取的集合。
進一步處理涉及讀取這些20K組並處理累積的數據。生成關於這組文件/屬性的報告。
我遇到的一個問題是,如果我將提取的集合存儲爲文本,那麼長屬性名稱字符串和文件名字符串將重複浪費磁盤空間並增加解析時間。
我正在考慮爲排序後的屬性名稱創建一箇中央索引,並且只保存索引 - 對於文件名來說是相同的,就像導入的.py文件一樣。
將索引用於排序的名稱列表的另一種方法是使用str。 散列()價值作爲索引,這可能意味着更快的處理,但我擔心兩個不相等的字符串可能會以相同的散列()值結束。這可能發生嗎?
我會在所有機器上使用相同的Python可執行文件和操作系統版本。
散列的整點你是從值中計算出來的,並且給定值的哈希值不會改變。你不能只是不斷改變哈希,直到它不碰撞。 – 2010-11-02 12:08:29
您可以不斷更改散列函數,直到散列值永遠不會碰撞爲止,並且只需要讓所有分佈式進程使用此特定散列函數即可。這被稱爲完美哈希;我認爲這是(或者至少)在一些編譯器中用來合理編譯巨大的'case'語句。 – ondra 2010-11-03 08:24:51
所以它歸結爲完美的哈希或使用索引?我想我會把它們編碼起來,然後看看最好的。 – Paddy3118 2010-11-03 23:08:04