从JanusGraph删除具有百万度缩放比例的顶点

问题描述

  • 我正在将Janusgraph与Scylla作为存储引擎一起运行。
  • 该图的顶点的度为5M(从内到外),即大约有5M个顶点与之相连,
  • 我正在尝试通过gremlin查询graph.traversal().V(vertexId).drop().iterate()删除此顶点,但是这花费了很多时间(无法在20分钟内删除)。
  • 我了解上面的查询会迭代所有边缘并进行实际删除

我想知道是否有人遇到过类似的问题,并想出了解决办法。任何线索都会真正有帮助。

解决方法

我的信息可能已过时,也许有修改的方法可以执行此操作,但是由于对此问题没有任何答复,我认为我会提供我所知道的建议。在JanusGraph出现之前的几天,这张图被称为Titan,我遇到了类似您所描述的情况,我发现在进行直接g.V(id).drop()时会发现类似的结果,并且该结果完全摆脱了该大小的顶点意味着要有耐心。我用来摆脱它的策略包括修剪其边缘的顶点,以便可以删除顶点本身。

如何修剪边缘取决于您的数据以及这5M边缘的构成方式。可以很简单,只需按标签或一次在每个标签中按10000个块进行操作,或将过程分解为大块的其他有意义的事情。

while(g.V(vertexId).outE('knows').limit(1).hasNext()) {
    g.V(vertexId).outE('knows').limit(10000).drop().iterate();
}

我想我记得我能够并行运行这些类型的操作,这使该过程有所加快。无论如何,当顶点的所有边缘都没有(或者至少减小到较小的度数)时,您可以g.V(vertexId).drop()并告别它。

我没有使用ScyllaDB,但我想我记得很多删除操作都会给Cassandra造成逻辑删除类型的问题,因此值得一提。您可能还会考虑增加在此过程中可能发生的各种超时。

对于我来说,多年来我就此问题吸取的教训是建立基于OLAP的监视器,该监视器跟踪图形统计信息,以确保图形中具有适当的预期增长(即度分布,标签分布,等等)。这对于从诸如Kafka之类的大流量流中馈送的图形来说尤其重要,您可以在其中转过头几个小时然后回来,发现图形处于丑陋的意外状态。我认为以能够解决这些超级节点状态的可能性的方式进行建模也很重要。在许多情况下,边缘TTL和单向边缘都可以帮助解决问题。

我很想听听这个答案不再相关,并且有一些新颖的新方法可以执行此类丢弃操作,或者有一些ScyllaDB特定方法可以解决此问题,但是,如果没有,也许这将是对您有用,并帮助您解决问题。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...