跳转至

分片ID

点和边分布在不同的分片,分片分布在不同的机器。分片数量在 CREATE SPACE 语句中指定,此后不可更改。

如果需要将某些点放置在相同的分片(例如在一台机器上),可以参考公式或代码

下文用简单代码说明VID和分片的关系。

    // 如果ID长度为8,为了兼容1.0,将数据类型视为int64。
    uint64_t vid = 0;
    if (id.size() == 8) {
        memcpy(static_cast<void*>(&vid), id.data(), 8);
    } else {
        MurmurHash2 hash;
        vid = hash(id.data());
    }
    PartitionID pId = vid % numParts + 1;

简单来说,上述代码是将一个固定的字符串进行哈希计算,转换成数据类型为int64的数字(int64数字的哈希计算结果是数字本身),将数字取模,然后加1,即:

pId = vid % numParts + 1;

示例的部分参数说明如下。

参数 说明
% 取模运算。
numParts VID所在图空间的分片数,即CREATE SPACE语句中的partition_num值。
pId VID所在分片的ID。

例如有100个分片,VID为1、101和1001的三个点将会存储在相同的分片。分片ID和机器地址之间的映射是随机的,所以不能假定任何两个分片位于同一台机器上。


最后更新: 2021年5月18日