使用 MD5 哈希作为索引
Posted
技术标签:
【中文标题】使用 MD5 哈希作为索引【英文标题】:Using an MD5 Hash as an index 【发布时间】:2015-01-27 00:30:46 【问题描述】:我正在编写一个包含一组特定数据的 MongoDB 集合,并且我想通过对数据进行 MD5(或者可能是 SHA256)哈希并以此为基础进行比较,从而针对该数据运行比较。
我想知道使用固定长度的十六进制数字字符串是否是正确的方法。是否有更好的数据类型可以使用,例如“blob”甚至 64 位长整数来保存值? (这可能需要我使用一个产生 long 的散列函数——我不知道有一个,除了可能用 Eclispe 覆盖 Java .hashCode() 函数?)
如果完全有更好的方法,请在此处提供最佳实践建议!
【问题讨论】:
我是否理解正确,您基本上是在为集合元素寻找合适的哈希函数? 是的——一旦找到散列函数,在 Mongo 中用来保存散列的最佳数据类型。由于哈希仅由 0-9A-F 组成,我认为字符串会过多吗? 我取决于你想用它来做什么。将二进制内容转储到 MongoDB 非常简单,因为它只是这样做,而且精确比较也不成问题。如果您不希望这是完全随机的并且需要某种排序,那么最好使用字符串。我认为这样做的目的是匹配字段“子集”中的内容,否则根本没有意义。对于具有唯一散列内容的整个文档,称为“主键”,它已经存在。 【参考方案1】:在 MongoDB 中存储 MD5 哈希
如果您决定存储 MD5 哈希,则必须使用字符串或二进制(大小的一半)(请参阅here)。
最佳哈希函数
这很难回答,因为它在很大程度上取决于您集合中的数据类型。我个人认为 MD5 散列是一个好方法,但这又取决于用例。如果你想自定义/优化你的哈希,这个post 和这个post 可能会让你开始。它们涵盖了一些关于编写自定义哈希函数的简单方法。
【讨论】:
以上是关于使用 MD5 哈希作为索引的主要内容,如果未能解决你的问题,请参考以下文章