janusgraph幽灵节点定义

当一个顶点在一个事务中被删除,在另一个事务中同时被修改,两个事务成功地提交到最终一致的存储后端,该顶点被修改的属性或边仍然存在。这被称为幽灵节点。使用唯一性键可以在最终一致的后端上防止幽灵节点,但在大多数情况下,性能代价比较大。一个更可伸缩的方法是暂时允许幽灵节点,并在定期的时间间隔内清除它们。另一种选择是在使用的时候用checkInternalVertexExistence()函数实时检测事务详细配置
原文:https://docs.janusgraph.org/common-questions/#ghost-vertices
解决方式
使用janusgraph自带的OLAP任务清除幽灵节点
ghostRemover=ai_edu_graph.getBackend().buildEdgeScanJob().setJob(new org.janusgraph.graphdb.olap.job.GhostVertexRemover(ai_edu_graph)).execute()
查看结果
返回true表示删除完成
ghostRemover.isDone()
拓展信息
- 删除语句比较简单,可以看出是创建一个异步任务进行删除。
- 查看返回值
JanusGraphManagement.IndexJobFuture源码,可以看出返回值类型继承自Future返回值详细信息为ScanMetrics。
针对Future可以使用isDone()方法查看是否完成;get()方法等待任务结束获取返回信息类ScanMetrics,cancel()方法中断任务;getIntermediateResult()方法可以返回一个ScanMetrics查看实时的指标数据。 - 查看
ScanMetrics源码,可以看出这可以返回任务的一些指标,默认值包含成功数和失败数,同时支持自定义指标。

查看任务成功或失败扫描节点数
ghostRemover.getIntermediateResult().get(org.janusgraph.diskstorage.keycolumnvalue.scan.ScanMetrics.Metric.SUCCESS);
ghostRemover.getIntermediateResult().get(org.janusgraph.diskstorage.keycolumnvalue.scan.ScanMetrics.Metric.FAILURE);
- 查看
GhostVertexRemover源码

查看GhostVertexRemover自定义的指标,比如查看删除的关系和节点数量
ghostRemover.getIntermediateResult().getCustom(org.janusgraph.graphdb.olap.job.GhostVertexRemover.REMOVED_VERTEX_COUNT)
ghostRemover.getIntermediateResult().getCustom(org.janusgraph.graphdb.olap.job.GhostVertexRemover.REMOVED_RELATION_COUNT)
JanusGraph中的幽灵节点是指在并发事务中被删除但仍有残留属性或边的顶点。解决这个问题可以通过定期执行内置的OLAP任务GhostVertexRemover来清除。该任务在完成后可通过isDone()检查状态,使用getIntermediateResult()获取ScanMetrics,如成功删除的节点和边的数量。此外,可以通过getCustom()方法获取自定义指标,例如删除的顶点和关系计数。
451

被折叠的 条评论
为什么被折叠?



