nebula graph 1.2.0 如何高效获取超级节点同类型rank最高的N条边

  • nebula 版本:V1.2.0
  • 部署方式(分布式 / 单机 / Docker / DBaaS):分布式
  • 硬件信息
    • 磁盘( 推荐使用 SSD):SSD
    • CPU、内存信息:32核64线程,128GB,6台
  • 问题的具体描述:
    运行:
    GO FROM 106200039614 OVER search_down YIELD search_down._rank AS rank, search_down._dst AS dst | ORDER BY rank DESC | LIMIT 5;
    结果如下:
    rank dst
    4763303 2222071
    192395 3610816
    72539 3420202
    65746 30244071
    54107 3387778

因为考虑到边太多,使用 order by 效率太低。决定使用 稠密点处理中的直接截断法:
UPDATE CONFIGS storage:enable_reservoir_sampling = false;
UPDATE CONFIGS storage:max_edge_returned_per_vertex = 5;
GO FROM 106200039614 OVER search_down YIELD search_down._rank AS rank, search_down._dst AS dst;

结果如下:
rank dst
15374 30281810
5397 3668206
7706 3382741
7717 3562522
24104 3729665

查出来的5条边的 rank 值既不是最大的,也不是最小的。
(最小5条边rank值如下:
rank dst
4402 3659273
5211 3584563
5261 336968
5397 3668206
5774 30042884)

对于超级节点,如果我只希望查询到 权重最高 的TopN 条边,我该怎么做呢?order by 效率很低,尤其是多跳的时候,有没有效率更高的方法?

这个得改下代码,把rank按大端保存,不过1.0没改,还是按小端存的

只需要改rank的编码方式就可以吗?其它的 srcId、dstId的编码方式不用动是吧

如果我自己改的话,是不是只改storage中rank编码就好了

理论上是 2.0对应的是这个PR 你可以看看 有问题再问我

2 个赞