分片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日