Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Titan要创建配置为唯一的重复顶点关键点? 小结_Java_Cassandra_Graph Databases_Titan_Berkeley Db Je - Fatal编程技术网

Java 为什么Titan要创建配置为唯一的重复顶点关键点? 小结

Java 为什么Titan要创建配置为唯一的重复顶点关键点? 小结,java,cassandra,graph-databases,titan,berkeley-db-je,Java,Cassandra,Graph Databases,Titan,Berkeley Db Je,使用最新的Titan-0.5快照。我们的代码在并发线程中创建顶点。我们最终的状态是,我们有多个顶点具有相同的关键点。由于我们的限制,我们预计不会发生这种情况 使用以下配置密钥: PropertyKey name = management.makePropertyKey(keyName) .dataType(String.class) .cardinality(Cardinality

使用最新的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。在并发线程中写入DB时,我们发现Titan使用同一个键持久化多个顶点

我将问题归结为一个测试文件: 这是针对最新版本的0.5分支构建的

代码生成三个线程,通过倒计时锁存器同步以并发启动(尽可能多)。 然后,线程: 使用键“key\u VALUE\u A”创建顶点 使用键“key\u VALUE\u B”创建顶点 在两者之间创建一个标签 如果线程按顺序运行,则会出现由于重复键而导致的异常。我已经能够强迫这个案子了

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

不幸的是,当我运行此操作时,DB会反复处于一种有两个以上顶点和边的状态。存在具有重复关键点的顶点。 测试将图形转储为XML。例子:

中的测试代码是为berkeleydb配置的,但我也针对Cassandra重复了这个问题

问题
  • 我是否正确配置了模式,使得顶点键应该是唯一的
  • 我应该对交易做些不同的事情吗
  • 我是否误解了泰坦的预期行为

我在基于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);

嘿,克里斯,你有没有想过?我使用的是基于titan的
Janusgraph
,有一个类似的问题,我在属性键
uid
上定义并索引了顶点的唯一约束,但仍然能够使用相同的uid创建多个顶点。嗨,Amyth-抱歉,这是很久以前的事了-我想我没有解决这个问题。当然@Chris。谢谢回复:)