【发布时间】:2020-12-29 17:07:10
【问题描述】:
我们的服务在 Janusgraph 中运行大量并发更新和删除顶点。
有时我们会得到带有vertex 标签的奇数顶点,而不是所有相关的属性和边。有时这个顶点只有一个属性(三个强制性的)或一个边而没有任何属性。从我们的业务逻辑来看,这个顶点看起来不一致和损坏。查看服务日志,我看不到与此顶点 ID 相关的特定错误或异常情况。
试图移除这样的顶点
- 有时我们会遇到如下错误:
2020-12-23 15:57:09 ERROR StandardJanusGraph:750 - Could not commit transaction [2] due to storage exception in commit
org.janusgraph.core.JanusGraphException: Could not execute operation due to backend exception
- 有时我们会得到删除的成功结果,但实际上并未删除顶点,并且仍然存在于图中。
搜索 Janusgraph 文档,我发现了 ghost vertices 的概念
当在一个事务中同时删除同一个顶点并在另一个事务中修改时,两个事务都将成功提交到最终一致的存储后端,并且该顶点仍然存在,仅具有修改后的属性或边。这被称为幽灵顶点。
我还发现 Janusgraph 存储库中有 GhostVertexRemover 类,旨在运行以删除此类顶点。
我们仍然怀疑我们拥有的损坏顶点是否是文档中描述的幽灵顶点。
【问题讨论】:
-
您使用了哪个存储后端?顶点的并发更新和删除是否发生在同一个 JVM 中?我假设 ConsistencyModifier.LOCK 只能在同一个 JVM 中工作。
标签: janusgraph