0

次のコマンドを使用して、インデックスを使用してパフォーマンスを向上させ、 titan db のノードをクエリします。

TitanManagement mgmt = graph.openManagement();
PropertyKey buyer = mgmt.makePropertyKey("buyer").dataType(String.class).cardinality(Cardinality.SINGLE).make();
TitanGraphIndex buyeri = mgmt.buildIndex("buyer", Vertex.class).addKey(buyer).buildCompositeIndex();
mgmt.setConsistency(buyeri, ConsistencyModifier.LOCK);
g.V().has("buyer","buyer", "buyer10").out("order_is").values("order").fill(list);     

titan 1.0.0 、gremlin クエリ言語を使用して、このクエリの実行中にエラーがスローされます。

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:293)
at java.lang.Thread.run(Thread.java:745)Caused by: com.thinkaurelius.titan.core.SchemaViolationException: Adding this property for key [~T$SchemaName] and value [rtbuyer] violates a uniqueness constraint [SystemIndex#~T$SchemaName]
at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx.addProperty(StandardTitanTx.java:780)
at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx.addProperty(StandardTitanTx.java:706)
at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx.makeSchemaVertex(StandardTitanTx.java:836)
at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx.makePropertyKey(StandardTitanTx.java:856)
at com.thinkaurelius.titan.graphdb.types.StandardPropertyKeyMaker.make(StandardPropertyKeyMaker.java:86)
at pluradj.titan.tinkerpop3.example.JavaExample2.main(JavaExample2.java:56)

@jason Pluradの回答で以下に記載されている更新

利用した

 PropertyKey buyer = (!mgmt.containsPropertyKey("buyer")) ?
        mgmt.makePropertyKey("buyer").dataType(String.class).cardinality(Cardinality.SINGLE).make() :
        mgmt.getPropertyKey("buyer");
    TitanGraphIndex buyeri = mgmt.getGraphIndex("buyeri");
    if (buyeri == null) {
        VertexLabel buyr = mgmt.getVertexLabel("buyer");
        buyeri = mgmt.buildIndex("buyeri", Vertex.class).addKey(buyer).indexOnly(buyr). buildCompositeIndex();
        mgmt.setConsistency(buyeri, ConsistencyModifier.LOCK);
    }

    mgmt.commit();
     st=System.currentTimeMillis();
     g.V().has("buyer","buyer", "buyer10").out("order_is").values("order").fill(list);     
     System.out.println(System.currentTimeMillis()-st +"millllli");

次のコードを使用してバイヤーのインデックスを作成し、頂点の検索を高速化しますが、インデックスが機能しない理由がわかりません。誰か修正してください。

私はtitan db indexing partのドキュメントを読みましたが、動作していないと思います..

4

1 に答える 1

5

ここでの問題は、スタック トレースで次のように示されます。

Caused by: com.thinkaurelius.titan.core.SchemaViolationException: Adding this property for key [~T$SchemaName] and value [rtbuyer] violates a uniqueness constraint [SystemIndex#~T$SchemaName]

コードがスキーマを複数回作成しようとしています (おそらく、プログラムを繰り返し呼び出すことによって)。上記のスキーマ作成コードは、作成を試みる前にプロパティ キーが存在するかどうかをチェックしません。

の使用法はhas("buyer", "buyer", "buyer10")、頂点ラベル「buyer」と頂点プロパティ「buyer」が「buyer10」に等しい頂点を探しています。あなたのスキーマ定義の定義には頂点ラベルがなかったので、has("buyer", "buyer10")より適切だと思います。

gremlin.sh から実行できるこの例を確認してください。インデックスを使用し、警告メッセージを表示しません。

gremlin> graph = TitanFactory.build().set('storage.backend','inmemory').open()
==>standardtitangraph[inmemory:[127.0.0.1]]
gremlin> g = graph.traversal()
==>graphtraversalsource[standardtitangraph[inmemory:[127.0.0.1]], standard]
gremlin> mgmt = graph.openManagement()
==>com.thinkaurelius.titan.graphdb.database.management.ManagementSystem@7026b7ee
gremlin> buyer = (!mgmt.containsPropertyKey("buyer")) ?
gremlin>     mgmt.makePropertyKey("buyer").dataType(String.class).cardinality(Cardinality.SINGLE).make() :
gremlin>     mgmt.getPropertyKey("buyer");
==>buyer
gremlin> buyeri = mgmt.getGraphIndex("buyeri");
==>null
gremlin> if (buyeri == null) {
gremlin>     buyeri = mgmt.buildIndex("buyeri", Vertex.class).addKey(buyer).buildCompositeIndex();
gremlin>     mgmt.setConsistency(buyeri, ConsistencyModifier.LOCK);
gremlin> }
==>null
gremlin> mgmt.commit();
==>null
gremlin> v = graph.addVertex("buyer", "buyer10", "name", "ten")
==>v[4184]
gremlin> g.V().has("buyer", "buyer10").values("name")
==>ten
于 2015-10-05T04:09:11.883 に答える