nebula图数据库md5或hash函数如何加密字符串生成一个整数

  • 需求原因 / 使用场景
    nebula v1版本的VID只能为整数
  • 需求描述
    nebula内部的hash或者md5函数是如何将一个字符串加密为一个整数

内部的hash 函数用的是 MurmurHash2

你可以看 点ID和分片ID - Nebula Graph Database 内核手册 里面的介绍

nebula v1版本VID支持的最大整数是18位的,我看你们代码调用的MurmurHash2那个函数生成的hash值是大于18位的,go版本复现c++的MurmurHash2如下图:
你们是后续又做了什么别的计算使其小于18位吗?

nebula hash 出来的值就是一个int64,int64的范围是 [-9223372036854775808, 9223372036854775807],还有 MurmurHash2 算法有个seek 值的,文档有说明,你要用文档的seek值。你截图的 go 的 hash出来的是个uint64,类型都不一样。

你好,请问一下,nebula是调用的这个hash函数来生成VID的吗?
这里也是uint64类型,:grin:,seed也是跟我设置的一样的呢

我上面描述不太对。这里的hash 函数算出来是个uint64,但是1.0的id是int64,所以会从uint64转成int64,但是去求vid对应partid的时候,是直接用这个uint64的。所以你要把它当id,需要转成int64才能和nebula计算出来的id值一致。

MurmurHash函数返回的uint64直接强转成int64即可哦?
不会存在超出int64范围的情况吧?
MurmurHash函数里指定的seed这几个常量是不是就是设计用来保证uint64的值在转换为int64时不会出现overflow的报错呀?

uint64 转 int64 不会溢出的,go 本来就有int64。像有的语言没有,可能转的时候就需要注意和c++的保持一致。

非常感谢小哥哥的热心解答。 :100:

是小姐姐。。。

浙ICP备20010487号