Warm tip: This article is reproduced from serverfault.com, please click

gremlin-对JanusGraph进行控制台查询的随机添加速度很慢

(gremlin - Gremling console queries to JanusGraph are randomly slow)

发布于 2020-12-01 11:02:42

我有一个超级简单的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
Questioner
Michi-2142
Viewed
0
Michi-2142 2020-12-02 19:45:37

我通过向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文档的改编版