私はいくつかのインデックスを持つグラフを持っています。それらはラベルの拘束を持つ2つの複合インデックスです。 (どちらもまったく同じプロパティ/ラベルで全く同じです)。 間違いなく動作するようですが、もう一方は動作しません。プロパティuid
とnode
にラベルを付ける:タイタンDbはインデックスを無視する
一つはKeyOnNode
と呼ばれている:上記完全に許容され、うまく機能
gremlin> g.V().hasLabel("node").has("uid", "xxxxxxxx").profile().cap(...)
==>Traversal Metrics
Step Count Traversers Time (ms) % Dur
=============================================================================================================
TitanGraphStep([~label.eq(node), uid.eq(dammit_... 1 1 2.565 96.84
optimization 1.383
backend-query 1 0.231
SideEffectCapStep([~metrics]) 1 1 0.083 3.16
>TOTAL - - 2.648 -
私は倍増確認するには、次のプロファイルを()やりました。私は魔法のラインがbackend-query
だと仮定しています。
他はNameOnSuperNode
と呼ばれている:プロパティname
とラベルsupernode
:
gremlin> g.V().hasLabel("supernode").has("name", "xxxxxxxx").profile().cap(...)
==>Traversal Metrics
Step Count Traversers Time (ms) % Dur
=============================================================================================================
TitanGraphStep([~label.eq(supernode), name.eq(n... 1 1 5763.163 100.00
optimization 2.261
scan 0.000
SideEffectCapStep([~metrics]) 1 1 0.073 0.00
>TOTAL - - 5763.236 -
クエリは、時間のとんでもない量を取り、我々はscan
ラインを持っています。
gremlin> m = graphT.openManagement();
==>com.t[email protected]73c1c105
gremlin> index = m.getGraphIndex("NameOnSuperNode")
==>NameOnSuperNode
gremlin> index.getFieldKeys()
==>name
gremlin> import static com.thinkaurelius.titan.graphdb.types.TypeDefinitionCategory.*
==>null
gremlin> sv = m.getSchemaVertex(index)
==>NameOnSuperNode
gremlin> rel = sv.getRelated(INDEX_SCHEMA_CONSTRAINT, Direction.OUT)
==>[email protected]2
gremlin> sse = rel.iterator().next()
==>[email protected]5
gremlin> sse.getSchemaType()
==>supernode
私はちょうどこの時点でDBをリセットすることはできません:インデックスは管理システムを通じてコミットされなかったが、次はそう悲しいかなうまく動作する場合、私はもともと疑問に思いました。どのような問題が起こっているのかを突き止める助けがあれば、私はここに壁を打っています。 これは再インデックスする必要がある兆候ですか?
INFO:タイタンDB 1.1(TP 3.1.1)
乾杯
UPDATE:
gremlin> :> m = graphT.openManagement(); index = m.getGraphIndex("NameOnSuperNode"); pkey = index.getFieldKeys()[0]; index.getIndexStatus(pkey)
==>INSTALLED
:私は、問題のインデックスがREGISTERED
状態ではないことを発見した
どうすれば登録できますか?私はm.updateIndex(index, SchemaAction.REGISTER_INDEX).get(); m.commit(); graphT.tx().commit();
を試みたが、何に
UPDATE 2やっていないようです:私は次のようにインデックスを再作成するために、インデックスをregitering試してみた:
gremlin> m = graphT.openManagement();
index = m.getGraphIndex("NameOnSuperNode") ;
import static com.thinkaurelius.titan.graphdb.types.TypeDefinitionCategory.*;
import com.thinkaurelius.titan.graphdb.database.management.ManagementSystem;
m.updateIndex(index, SchemaAction.REGISTER_INDEX).get();
ManagementSystem.awaitGraphIndexStatus(graphT, "NameOnSuperNode").status(SchemaStatus.REGISTERED).timeout(20, java.time.temporal.ChronoUnit.MINUTES).call();
m.commit();
graphT.tx().commit()
しかし、これではありませんがワーキング。私はまだINSTALLED
ステータスの私のインデックスを持っており、私はまだタイムアウトを得ています。オープンな取引がないことを確認しました。誰でもアイデアはありますか? FYIグラフは単一のサーバー上で実行されており、〜100Kの頂点と〜130kのエッジを持っています。
ありがとうございます!私はいくつかのことを試みます。 'awaitGraphIndexStatus()'のタイムアウトをどのように延長するか頭の中から何か知っていますか?また、私が再インデックス化するために必要な状態は何ですか?これは 'INSTALLED'から行うことはできません –
2番目の答え[ここ](http://stackoverflow.com/questions/35656531/unable-to-create-a-composite-index-stuck-at-installed)に答える必要がありますあなたのためのそれらの両方の質問!がんばろう! – David
私は最初に言ったつもりです^ – David