Eng*_*ain 7 algorithm hash hash-function data-structures
我将消息序列存储在数据库中,每个序列可以包含多达N消息.我想创建一个散列函数,它将表示消息序列,并且如果消息序列存在,则能够更快地检查.
每条消息都有一个区分大小写的字母数字通用唯一ID(UUID).考虑(M1, M2, M3)使用ids 跟踪消息 -
M1 - a3RA0000000e0taBB
M2 - a3RA00033000e0taC
M3 - a3RA0787600e0taBB
消息序列可以是
Sequence-1 : (M1,M2,M3)
Sequence-2 : (M1,M3,M2)
Sequence-3 : (M2,M1,M3)
Sequence-4 : (M1,M2)
Sequence-5 : (M2,M3)
...等等...
以下是用于存储消息序列的数据库结构示例
给定消息序列,我们需要检查数据库中是否存在该消息序列.例如,检查数据库中是否存在消息序列,M1 -> M2 -> M3即UID (a3RA0000000e0taBB -> a3RA00033000e0taC -> a3RA0787600e0taBB).
我想创建一个哈希函数来代替扫描表中的行,而哈希函数用哈希值表示消息序列.使用表中的哈希值查找应该更快.
我想知道什么是最佳散列函数用于存储消息序列散列更快是存在检查.
你不需要一个完整的加密哈希,只需要一个快速的,那么看看 FastHash 怎么样:https : //github.com/ZilongTan/Coding/tree/master/fast-hash。如果您认为 32 位或 64 位哈希不够用(即产生太多冲突),那么您可以使用更长的 MurmurHash:https : //en.wikipedia.org/wiki/MurmurHash(实际上,FastHash 的作者推荐这种方法)
维基百科上有更多算法列表:https : //en.wikipedia.org/wiki/List_of_hash_functions#Non-cryptographic_hash_functions
在任何情况下,即使在现代机器上,使用位运算(SHIFT、XOR ...)的散列应该比您的方法中的乘法更快。