2017-04-27 30 views
0

私は現在gremlin python clientのTinkerpopをデフォルトのTinkerGraph-Gremlin(メモリ内で実行中)で使用しています。私は私のクエリのパフォーマンスを向上させ、幸いにも私はPythonクライアントでインデックスを作成することができませんでした私の使用例のための完璧なように聞こえるcreateIndex()関数について読んでいたかった。また、これらの行を起動groovyスクリプト(エラーなしでgroovy scirptを実行)に追加しようとしましたが、パフォーマンスベンチマークを実行しても同じ結果が得られます。Gremlin Python createIndex(Tinkerpop)

私の質問は:私は、Pythonクライアントでインデックスを作成することができますし、回避策は何ですか?また、インデックスが定義されている場合はgremlinに問い合わせる方法もありますか?私はデフォルトempty-sample.grooyを使用し、最後の呼び出しの前にこれらの行を追加するグルーヴィーなスクリプトについては

PS::

graph.createIndex("name", Vertex.class) 
graph.createIndex("nap", Edge.class) 

ありがとう!

+0

どちらの方法も有効です。好奇心から、あなたのグラフはどれくらいですか? –

+0

@stephenmallette問題は、pythonクライアントでcreateIndex()メソッドが見つからないことです(私が知る限り)。また、2行をgroovyスクリプトに追加すると、同じクエリ時間になります。約8000の頂点。 –

答えて

1

Pythonクライアントは、TinkerPopが3.xのインデックスに対して抽象化を提供しないため、createIndex()メソッドを持たないでしょう。私たちは、基礎となるグラフデータベースのインデックスとスキーマの作成方法に頼っています。そのAPIレベルに落として、TinkerPopからドロップアウトする必要があります。

クエリの速度を使ってインデックスを作成するかどうかだけを判断する場合、グラフには8800個の頂点しかなく、TinkerGraphはインメモリグラフであることに注意してください。その数の少ない頂点では、スピードには目に見えない差があります。あなたが知りたい場合は、あなたのインデックスが作成されている場合だけで、それを調べる:

gremlin> graph = TinkerGraph.open() 
==>tinkergraph[vertices:0 edges:0] 
gremlin> g = graph.traversal() 
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard] 
gremlin> graph.createIndex('name',Vertex.class) 
gremlin> graph.getIndexedKeys(Vertex.class) 
==>name 
+0

あなたの迅速な対応に感謝します!グラフをもう一度チェックしました: 'g.V()。count()。next()16000'と' g.E()。count()。next()31000'。最後の1つの質問: 'name 'にインデックスを作成した場合、' has(' name '、xxx) 'ステートメントで常に' name'を最初に選択する必要がありますか? –

+0

TinkerGraphでは、最も選択的なインデックス付きプロパティを最初に配置する必要があります。他のグラフは異なった振る舞いをし、一連の 'has()'ステップを最適化することができます。 –

0

がTinkerPopのgithubのを検索

gremlinpython v3.2.6を使用して、それがデータベースコンソールあったように私はあなたが直接要求を送信することができましたクライアントオブジェクトを使用します。この現象は、the GitHub of Tinkerpopで説明されています。私はGitHubの非同期1もあります、同期バージョンを紹介します:

from gremlin_python.driver.client import Client 

client = Client(url, travelsal_source) 
console_command_string = "2*2" # Write code as it was the console of the database you're using 
result_set = client.submit(console_command_string) 
future_results = result_set.all() 
results = future_results.result() 

client.close() 

Janusgraphの場合には、それが詳述されている、あなたが使用している正確なデータベースを見て、あなたが送信する必要がコマンドかを確認するにはits indexing documentation

関連する問題