如何解决从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特定方法可以解决此问题,但是,如果没有,也许这将是对您有用,并帮助您解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。