我有一个超级简单的gremlin查询,该查询通过gremlin控制台发送到IBM Cloud托管的JanusGraph。奇怪的是,执行时间有时非常快,然后又非常慢。那会是什么?该属性uid
的类型为字符串,可以是GUID,也可以是其他类型。
gremlin> g.V().has('uid', 'f287342c-ff84-4102-8f18-f3aa759470a7').hasLabel('product').profile()
==>Traversal Metrics
Step Count Traversers Time (ms) % Dur
=============================================================================================================
JanusGraphStep([],[uid.eq(f287342c-ff84-4102-8f... 1 1 1107.212 100.00
\_condition=(uid = f287342c-ff84-4102-8f18-f3aa759470a7 AND ~label = product)
\_isFitted=false
\_query=[]
\_orders=[]
\_isOrdered=true
optimization 0.014
optimization 0.055
scan 0.000
\_condition=VERTEX
\_query=[]
\_fullscan=true
>TOTAL - - 1107.212 -
gremlin> g.V().has('uid', 'f287342c-ff84-4102-8f18-f3aa759470a7').hasLabel('product').profile()
==>Traversal Metrics
Step Count Traversers Time (ms) % Dur
=============================================================================================================
JanusGraphStep([],[uid.eq(f287342c-ff84-4102-8f... 1 1 129.861 100.00
\_condition=(uid = f287342c-ff84-4102-8f18-f3aa759470a7 AND ~label = product)
\_isFitted=false
\_query=[]
\_orders=[]
\_isOrdered=true
optimization 0.014
optimization 0.056
scan 0.000
\_condition=VERTEX
\_query=[]
\_fullscan=true
>TOTAL - - 129.861 -
gremlin> g.V().has('uid', 'f287342c-ff84-4102-8f18-f3aa759470a7').hasLabel('product').profile()
==>Traversal Metrics
Step Count Traversers Time (ms) % Dur
=============================================================================================================
JanusGraphStep([],[uid.eq(f287342c-ff84-4102-8f... 1 1 2581.514 100.00
\_condition=(uid = f287342c-ff84-4102-8f18-f3aa759470a7 AND ~label = product)
\_isFitted=false
\_query=[]
\_orders=[]
\_isOrdered=true
optimization 0.024
optimization 0.094
scan 0.000
\_condition=VERTEX
\_query=[]
\_fullscan=true
>TOTAL - - 2581.514
我通过向property添加索引找到了解决方案uid
。我以为JanusGraph会自动执行此操作,但事实并非如此。在JanusGraph gramlin控制台上使用以下步骤。
gremlin> graph = ConfiguredGraphFactory.open('g')
gremlin> mgmt = graph.openManagement()
gremlin> uidKey = mgmt.getPropertyKey('uid')
gremlin> mgmt.buildIndex('uidIndex', Vertex.class).addKey(uidKey ).buildCompositeIndex()
gremlin> mgmt.commit()
这是JanusGraph文档的改编版。