2017-04-27 49 views
0

我目前使用Tinkerpop與gremlin python client與默認TinkerGraph-Gremlin(這是運行內存中)。我想提高查詢的性能,並閱讀createIndex()函數,這聽起來像是我的用例的完美功能,可惜我無法使用python客戶端創建索引。我也嘗試將這些行添加到啓動groovy腳本(通過groovy scirpt運行時沒有錯誤),但是當我運行我的性能基準測試時,我得到了相同的結果。Gremlin Python createIndex(Tinkerpop)

所以我的問題是:我可以創建一個與python客戶端的索引,如果不是什麼將是一種解決方法?還有一種方法可以問gremlin是否有任何索引定義?

PS:對於Groovy腳本我使用了默認empty-sample.grooy最後調用之前加上這些行:

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

謝謝!

+0

這兩種方法都應該有效。出於好奇,你的圖表有多大? –

+0

@stephenmallette問題是,在python客戶端的createIndex()方法丟失(據我所知)。將這兩行添加到groovy腳本中會導致相同的查詢時間。約8000個頂點。 –

回答

1

python客戶端將不會有一個createIndex()方法,因爲TinkerPop不提供對3.x中索引的任何抽象。我們依賴底層圖形數據庫的索引和模式創建方法。您必須下降到該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'。最後一個問題:如果我在'name'上創建了一個索引,我應該總是首先用'has('name',xxx)'語句選擇'name'? –

+0

有了TinkerGraph,你應該把你最有選擇性的索引屬性放在第一位。其他圖表可能會有不同的表現,並可以更好地優化一系列「有()」步驟。 –

0

使用gremlinpython v3.2.6

搜索TinkerPop有關的github上,我發現你可以直接發送請求,因爲它是數據庫控制檯使用客戶端對象。此行爲在the GitHub of Tinkerpop中解釋。我會告訴同步版本,在GitHub上有一個異步一個也:

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