根据以后的实验进行更新:
最初我假设PermanentLockingException是由于我使用带锁定的唯一索引。我从索引图配置中删除了这个unique()属性,但仍然遇到了相同的PermanentLockingException。
为了澄清,我有两个单独的索引,我试图同时更新其中两个。我没有尝试从两个线程更新相同的索引并遇到此问题。
这向我表明,无论索引类型如何,Titan都会为每个基于索引的事务获得某种全局锁定?这意味着在任何给定时间Titan只能更新一个索引树?
这是对的吗?
由于
我使用Titan 1.0.0和Cassandra后端。我在Titan上创建了两个复合索引:
index1 = mgmt.buildIndex(indexName, Vertex.class).
addKey(indexPropertyKey1).addKey(indexPropertyKey2).unique()
.buildCompositeIndex();
index2 = mgmt.buildIndex(indexName, Vertex.class).
addKey(indexPropertyKey1).addKey(indexPropertyKey3).unique()
.buildCompositeIndex();
我这样做的目的是确保后端中只有1个条目与Key1 + Key2复合组合。我不想要任何重复。我想用index2强制执行相同的操作。
我的理解是这些是两种不同的索引结构,所以它们之间不应该发生任何冲突。但我注意到,当我尝试对index1和index2进行并发访问/更新时,我从Titan获得了一个locking.PermanentLockingException。如果连续访问它我不会遇到任何麻烦。
我有些问题:
我对unique()的使用是否正确?
我没有明确设置ConsistencyModifier.LOCK,所以我假设某个其他图层默认设置为true?这种方式或其他方面有关系吗?
这是两个不同的索引。所以他们的访问应该是互斥的。我在这里错过了什么吗?
他们共享一个属性键key1,这有关系吗?
如何允许并发访问这两个不同的索引?我可以明确地允许这个吗?它的成本是多少?
由于
以下是有人感兴趣的错误:
2016-09-01T12:17:19.29-0700 [App / 0] OUT [Z:C:] 2016-09-01 19:17:19 ERROR [pool-30-thread-1] cttgdStandardTitanGraph [StandardTitanGraph .java:695]由于系统提交中的存储异常,无法提交事务[8]
2016-09-01T12:17:19.29-0700 [App / 0] OUT com.thinkaurelius.titan.core.TitanException:由于后端异常而无法执行操作
2016-09-01T12:17:19.29-0700 [App / 0] OUT at com.thinkaurelius.titan.diskstorage.util.BackendOperation.execute(BackendOperation.java:44)
2016-09-01T12:17:19.29-0700 [App / 0] OUT at com.thinkaurelius.titan.diskstorage.keycolumnvalue.cache.CacheTransaction.persist(CacheTransaction.java:87)
2016-09-01T12:17:19.29-0700 [App / 0] OUT at com.thinkaurelius.titan.diskstorage.keycolumnvalue.cache.CacheTransaction.flushInternal(CacheTransaction.java:141)
2016-09-01T12:17:19.29-0700 [App / 0] OUT at com.thinkaurelius.titan.diskstorage.keycolumnvalue.cache.CacheTransaction.commit(CacheTransaction.java:198)
2016-09-01T12:17:19.29-0700 [App / 0] OUT at com.thinkaurelius.titan.diskstorage.BackendTransaction.commit(BackendTransaction.java:135)
2016-09-01T12:17:19.29-0700 [App / 0] OUT at com.thinkaurelius.titan.graphdb.database.StandardTitanGraph.commit(StandardTitanGraph.java:692)
2016-09-01T12:17:19.29-0700 [App / 0] OUT at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx.commit(StandardTitanTx.java:1352)
2016-09-01T12:17:19.29-0700 [App / 0] OUT at com.thinkaurelius.titan.graphdb.tinkerpop.TitanBlueprintsGraph $ GraphTransaction.doCommit(TitanBlueprintsGraph.java:263)
2016-09-01T12:17:19.29-0700 [App / 0] OUT at org.apache.tinkerpop.gremlin.structure.util.AbstractTransaction.commit(AbstractTransaction.java:94)
2016-09-01T12:17:19.29-0700 [App / 0] OUT at com.ge.predix.acs.privilege.management.dao.GraphGenericRepository.save(GraphGenericRepository.java:113)
2016-09-01T12:17:19.29-0700 [App / 0] OUT at com.ge.predix.acs.privilege.management.dao.ResourceMigrationManager.doResourceMigration(ResourceMigrationManager.java:52)
2016-09-01T12:17:19.29-0700 [App / 0] OUT at com.ge.predix.acs.privilege.management.dao.ResourceMigrationManager.run(ResourceMigrationManager.java:34)
2016-09-01T12:17:19.29-0700 [App / 0] OUT at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
2016-09-01T12:17:19.29-0700 [App / 0] OUT at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)
2016-09-01T12:17:19.29-0700 [App / 0] OUT at java.lang.Thread.run(Thread.java:745)
2016-09-01T12:17:19.29-0700 [App / 0] OUT引起:com.thinkaurelius.titan.diskstorage.locking.PermanentLockingException:KeyColumn的预期值不匹配[k = 0x 16-165-160- 114-116- 30-97-116-116-114-105-98-117-116-101-243,c = 0x 0]:expected = [] vs actual = [120-133](store = graphindex)< / p>