唯一ID序列的哈希函数(UUID)

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).

我想创建一个哈希函数来代替扫描表中的行,而哈希函数用哈希值表示消息序列.使用表中的哈希值查找应该更快.

我的简单哈希函数是 - 在此输入图像描述

我想知道什么是最佳散列函数用于存储消息序列散列更快是存在检查.

mem*_*emo 5

你不需要一个完整的加密哈希,只需要一个快速的,那么看看 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 ...)的散列应该比您的方法中的乘法更快。