【发布时间】:2020-03-11 16:19:14
【问题描述】:
如 JanusGraph 文档所述,我正在使用 multi-threaded transactions。我的每个线程都有助于构建目录树。在为特定目录插入新顶点之前,每个线程首先检查同一个查询中是否已经存在这样的顶点。如果找不到现有顶点,则仅使用.orElseGet 插入顶点。
Vertex vertex = graph.traversal().V()
.hasLabel(VertexLabels.DIRECTORY)
.has(PropertyKeys.PATH, directory.path())
.tryNext()
.orElseGet(() -> {
return graph.addVertex(
T.label, VertexLabels.DIRECTORY,
PropertyKeys.PATH, directory.path());
});
从技术上讲,假设所有线程都在相同的事务范围内运行,这应该可以防止重复。但是,我确实遇到了重复项。文档似乎没有就这个问题给出任何答案。能否确认多线程事务是否在同一个作用域内运行?
【问题讨论】:
标签: tinkerpop3 janusgraph