1)爲了達到非常低的散列衝突的目的,我可以使用sha1的128位中的一半而不是處理sha1本身嗎?我知道這不適合加密哈希,但我只需要散列表密鑰的哈希值。確定只能使用64位的sha1哈希作爲ID?
2)計算時間不是一個優先事項,除此之外我正在散列非常小的數據。特別是,我主要將採取2或3個64位散列並散列它們以獲得另一個64位散列。爲此,有沒有比sha1更好的選擇?再一次碰撞應該不太可能。
3)我是一個SQL新手。在數據庫中使用64位散列作爲ID是否是個好主意?將64位ID導致sqlite或postgres的性能問題?我需要跨多個數據庫(包括Lucene索引)來協調數據,所以我想我應該直接在表中處理哈希值,而不是用自動遞增的ID(這隻會在一個數據庫中有意義,而不是跨所有數據存儲)。我認爲64位是一個很好的折衷:對於不太可能發生的衝突足夠大,但可以節省空間(和查找時間?)。
4)CRC-64怎麼樣?這是否會產生足夠的隨機分佈?
我認爲當使用隨機散列數據作爲關鍵字時,如果關鍵字適合機器原生整數而不是字符串,大多數數據庫系統對搜索和連接操作更有效。 – bhelm 2015-06-24 05:57:41