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

标签 algorithm data-structures hash hash-function

我在数据库中存储消息序列,每个序列最多可以有 N 条消息。我想创建一个哈希函数来表示消息序列,并能够更快地检查消息序列是否存在。

每条消息都有一个区分大小写的字母数字通用唯一 ID (UUID)。 考虑以下消息 (M1, M2, M3) with ids-

M1 - a3RA0000000e0taBB M2 - a3RA00033000e0taC M3 - a3RA0787600e0taBB

消息序列可以是

序列 1 : (M1,M2,M3) 序列 2 : (M1,M3,M2) 序列 3 : (M2,M1,M3) 序列 4 : (M1,M2) 序列 5 : (M2,M3) ……等……

以下是存储消息序列的数据库结构示例

enter image description here

给定消息序列,我们需要检查数据库中是否存在该消息序列。例如,检查消息序列 M1 -> M2 -> M3 即 UIDs (a3RA0000000e0taBB -> a3RA00033000e0taC -> a3RA0787600e0taBB) 是否存在于数据库中。

我不想扫描表中的行,而是想创建一个哈希函数来表示具有哈希值的消息序列。在表中使用散列值查找据说更快。

我的简单哈希函数是- enter image description here

我想知道什么是用于存储消息序列哈希的最佳哈希函数,以便更快地进行是否存在检查。

最佳答案

您不需要成熟的加密散列,只需要一个快速散列,那么看看 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 ...)的散列应该比您的方法中的乘法更快,即使在现代机器上也是如此。

关于algorithm - 唯一 ID 序列 (UUID) 的哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51939047/

相关文章:

c - 使用数据结构和算法(特别是 C 编程语言)的内存数据库

ruby - 这个 ruby 哈希有什么问题

algorithm - 在此代码段中是否可以进行预分配?

algorithm - 最优蚁群定位算法

javascript - 使用 Highchart 树状图(向下钻取)

algorithm - 一个非常大的阶乘的最后一个非零数字

javascript - 在数组中过滤数组

c++ - 我可以检查给定的数字是否可以是任何具有 n 项的算术级数的总和?

javascript - 用于种子随机数生成的 MD5,更好的方法?

hash - 当 SHA-512 更安全时,为什么要使用 SHA1 来散列 secret ?