2015-01-27 741 views
1

我正在編寫一個包含特定數據集的MongoDB集合,並且我想通過採用數據的MD5(或可能是SHA256)散列並基於比較關閉來對該數據運行比較那個。使用MD5哈希作爲索引

我想知道是否使用固定長度的十六進制數字字符串是正確的做法。是否有更好的數據類型可供使用,例如「blob」或甚至是64位長整數來保存值? (這可能需要我使用哈希函數產生多個長度 - 除了可能用Eclispe重寫Java .hashCode()函數外,我不知道其中一個函數)

如果完全有更好的方法,建議最好的做法,將不勝感激!

+0

我是否正確理解您基本上正在爲集合中的元素查找正確的哈希函數? – fishi 2015-01-27 00:44:21

+0

是的 - 一旦找到這個散列函數,在Mongo中用來保存散列的最好的數據類型。由於哈希是由0-9A-F組成的,我認爲一個字符串會過度? – 2015-01-27 00:45:49

+0

我依賴於你想要真正使用它的東西。只是將二進制內容轉儲到MongoDB非常簡單,因爲它只是做它,精確的比較也不是問題。如果你不認爲這是完全隨機的並且需要某種排序,那麼你最好用一個字符串。我認爲這樣做的目的是匹配字段「子集」中的內容,否則根本沒有意義。對於唯一散列內容的整個文檔被稱爲已經存在的「主鍵」。 – 2015-01-27 01:49:38

回答

1

存儲在MongoDB中

你必須使用字符串或二進制(一半大小)的情況下,你決定存儲MD5哈希值(見here)MD5哈希值。

最好的Hash函數

這是很難回答的,因爲它在很大程度上取決於你的收藏中的數據類型。我個人認爲MD5哈希是一種好方法,但它又取決於用例。如果你想定製/優化你的散列,這個post和這個post可能會讓你開始。他們在編寫自定義哈希函數時會覆蓋一些簡單的食譜。