cpp 版本 kv 接口使用咨询

你好

我们在使用官方文档里的cpp key-value 接口,我想问一下它的功能跟java client 的get put接口功能是一样的吗?

谢谢

是的

目前是这样的,我们发现java client 的 hash 分片函数的出来的part id 和 cpp client 的hash分片函数算出来的 part id 结果不一致。

如果说我们自己把cpp client 里面的 get 和 put hash分片函数改掉会影响到其他功能吗?

cpp 使用的hash 函数:

java 使用的hash函数:

不知道java 有没有和cpp 一致的hash函数

请问,你那边是一定要同时用storage cpp client还有storage java client吗?

不需要java client ,但是我们的离线sst 文件是用 java spark 生成的,借鉴的java client 的分片函数,但是用cpp client 是查询不到的,因此离线生成sst需要和cpp client 的分片函数保持一致,所以想咨询官方有没有 cpp client 分片函数的java 写法

感谢您的反馈,这个我们后续会提供一个统一的处理方案,让每个客户端的都提供一个统一的hash函数

好的,MurmurHash3 应该是可以做到 java cpp 统一的。

还有一个问题,如果我们把只把 storage cpp client 里面put get的分片函数改掉,会影响到其他功能吗?

好的,MurmurHash3 应该是可以做到 java cpp 统一的。

是的,这块需要改下nebula的hash函数,然后java用到MurmurHash2 的时候seed 用 0xc70f6907UL

是的试了一下,可以拿到跟cpp一样的结果,感谢

public static int getPartIdCpp(String key, int partNum) {
        byte[] keyByte = key.getBytes(StandardCharsets.UTF_8);
        long hashKey = MurmurHash2.hash64(keyByte, keyByte.length, 0xc70f6907);
        int parId = (int) (Long.remainderUnsigned(hashKey, partNum) + 1);
        return parId;
    }
1 个赞