UUID

UUID 用于生成全局唯一的标识符。

当点数量到达十亿级别时,用 hash 函数生成 vid 有一定的冲突概率。因此 Nebula Graph 提供 UUID 函数来避免大量点时的 vid 冲突。 UUID 函数由 Murmurhash 与当前时间戳(单位为秒)组合而成。

UUID 性能及兼容性问题

UUID 产生的值会以 key-value 方式存储在 Nebula Graph 的 Storage 服务中,调用时会检查这个 key 是否存在或冲突。因此相比 hash,性能可能会更低。此外,UUID 在未来版本中可能存在兼容性问题。

插入 UUID

  1. -- 使用 UUID 函数插入一个点。
  2. nebula> INSERT VERTEX player (name, age) VALUES uuid("n0"):("n0", 21);
  3. -- 使用 UUID 函数插入一条边。
  4. nebula> INSERT EDGE follow(degree) VALUES uuid("n0") -> uuid("n1"): (90);

获取 UUID

  1. nebula> FETCH PROP ON player uuid("n0") YIELD player.name, player.age;
  2. -- 返回以下值:
  3. ===================================================
  4. | VertexID | player.name | player.age |
  5. ===================================================
  6. | -5057115778034027261 | n0 | 21 |
  7. ---------------------------------------------------
  8. nebula> FETCH PROP ON follow uuid("n0") -> uuid("n1");
  9. -- 返回以下值:
  10. =============================================================================
  11. | follow._src | follow._dst | follow._rank | follow.degree |
  12. =============================================================================
  13. | -5057115778034027261 | 4039977434270020867 | 0 | 90 |
  14. -----------------------------------------------------------------------------

结合 Go 使用 UUID:

  1. nebula> GO FROM uuid("n0") OVER follow;
  2. -- 返回以下值:
  3. =======================
  4. | follow._dst |
  5. =======================
  6. | 4039977434270020867 |
  7. -----------------------