Java 使用MD5哈希作为索引

Java 使用MD5哈希作为索引,java,sql,mongodb,hash,nosql,Java,Sql,Mongodb,Hash,Nosql,我正在编写一个包含一组特定数据的MongoDB集合,我希望通过对数据进行MD5(或者可能是SHA256)散列并基于该散列进行比较来对该数据进行比较 我想知道使用固定长度的十六进制数字字符串是否是正确的方法。是否有更好的数据类型可以使用,例如“blob”或甚至64位长的整数来保存值?(这可能需要我使用一个产生long的散列函数——除了可能用Eclispe重写Java.hashCode()函数之外,我不知道有哪一个函数) 如果有更好的方法,请在此提供最佳实践建议 在MongoDB中存储MD5哈希 如

我正在编写一个包含一组特定数据的MongoDB集合,我希望通过对数据进行MD5(或者可能是SHA256)散列并基于该散列进行比较来对该数据进行比较

我想知道使用固定长度的十六进制数字字符串是否是正确的方法。是否有更好的数据类型可以使用,例如“blob”或甚至64位长的整数来保存值?(这可能需要我使用一个产生long的散列函数——除了可能用Eclispe重写Java.hashCode()函数之外,我不知道有哪一个函数)


如果有更好的方法,请在此提供最佳实践建议

在MongoDB中存储MD5哈希

如果决定存储MD5哈希,则必须使用字符串或二进制(大小的一半)(请参阅)

最佳哈希函数


这很难回答,因为它高度依赖于您收集的数据类型。我个人认为MD5哈希是一种很好的方法,但这取决于用例。如果你想自定义/优化你的散列,这可能会让你开始。它们涵盖了编写自定义哈希函数的一些简单方法。

我是否正确理解您基本上是在为集合的元素寻找合适的哈希函数?是的——一旦找到了哈希函数,Mongo中保存哈希的最佳数据类型。因为散列是由0-9A-F组成的,所以我认为字符串太多了?这取决于你到底想用它做什么。将二进制内容转储到MongoDB非常简单,因为它就是这么做的,精确的比较也不是问题。如果您不希望这是完全随机的,并且需要某种排序,那么最好使用字符串。我认为这样做的目的是匹配字段“子集”中的内容,否则就没有意义了。对于唯一散列内容的整个文档,称为“主键”,它已经存在。