gpt4 book ai didi

java - 为什么 Titan 会创建配置唯一的重复顶点键?

转载 作者:太空宇宙 更新时间:2023-11-04 06:40:04 25 4
gpt4 key购买 nike

简要概述

使用最新的 Titan-0.5 快照。我们的代码在并发线程中创建顶点。我们最终处于这样一种状态:多个顶点具有相同的键。由于我们的限制,我们预计这种情况不会发生。

使用以下配置键:

PropertyKey name = management.makePropertyKey(keyName)
.dataType(String.class)
.cardinality(Cardinality.SINGLE)
.make();

TitanGraphIndex nameIndex = management.buildIndex(keyName, Vertex.class)
.indexKey(name)
.unique()
.buildCompositeIndex();

management.setConsistency(nameIndex, ConsistencyModifier.LOCK);

完整故事

我们有一个 Titan DB,配置了唯一的顶点属性键。当在并发线程中写入数据库时​​,我们发现 Titan 使用相同的键持久化多个顶点。

我已将问题简化为一个测试文件: https://gist.github.com/ubit-ee/8520304273cd2024af29这是针对最新的 0.5 分支构建的。

该代码生成三个线程,这些线程通过倒计时锁存器同步启动(尽可能多)。然后线程:使用键“KEY_VALUE_A”创建顶点使用键“KEY_VALUE_B”创建顶点在两者之间创建标签如果线程按顺序运行,则可能会因重复键而出现异常。我已经能够强制执行此案了。

当线程并发运行时,我希望至少有一个线程成功,任意数量的线程失败。无论如何,我希望图的最终状态是两个顶点和两者之间的一条边。

不幸的是,当我运行这个时,数据库反复处于具有超过 2 个顶点和边的状态。存在具有重复键的顶点。测试将图表转储为 XML。例子: https://gist.github.com/ubit-ee/d5530e4fa4b87c752294

为 berkeleydb 配置了测试代码,但我也针对 Cassandra 重复了该问题。

问题

  • 我是否正确配置了架构,以便顶点键应该是唯一的?
  • 我应该对交易采取不同的做法吗?
  • 我是否误解了 Titan 的预期行为?

最佳答案

我在基于 Titan 的 JanusGraph 0.2 中遇到了同样的问题。我通过以下代码解决了该问题。

JanusGraphManagement management = graph.openManagement();
PropertyKey uniqueId =management.makePropertyKey("uniqueId").dataType(String.class).cardinality(Cardinality.SINGLE).make();
JanusGraphManagement.IndexBuilder uniqueIdIndexBuilder = management.buildIndex("uniqueId", Vertex.class).addKey(uniqueId).unique();
JanusGraphIndex uniqueIdIndex = uniqueIdIndexBuilder.buildCompositeIndex();
management.setConsistency(uniqueIdIndex, ConsistencyModifier.LOCK);

关于java - 为什么 Titan 会创建配置唯一的重复顶点键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24796907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com