Как работает индекс в базе данных JanusGraph, когда у нас есть два столбца с двумя разными индексами - PullRequest
0 голосов
/ 28 мая 2018

Я использую версию JanusGraph 0.2.0.У меня есть следующие два индекса в моем графике.

mgmt = graph.openManagement()
keyName = mgmt.getPropertyKey('propertyKeyA')
labelName = mgmt.getVertexLabel('labelA')
mgmt.buildIndex('labelA_keyAIndex', Vertex.class).addKey(keyName).indexOnly(labelName).buildCompositeIndex()
mgmt.commit()
mgmt.awaitGraphIndexStatus(graph, 'labelA_keyAIndex').call()
mgmt = graph.openManagement()
mgmt.updateIndex(mgmt.getGraphIndex("labelA_keyAIndex"), SchemaAction.REINDEX).get()
mgmt.commit()
mgmt.awaitGraphIndexStatus(graph, 'labelA_keyAIndex').status(SchemaStatus.ENABLED).call()


mgmt = graph.openManagement()
keyName = mgmt.getPropertyKey("propertyKeyB")
mgmt.buildIndex("keyBIndex",Vertex.class).addKey(keyName).buildCompositeIndex()
mgmt.commit()
mgmt.awaitGraphIndexStatus(graph, "keyBIndex").call();
mgmt = graph.openManagement()
mgmt.updateIndex(mgmt.getGraphIndex("keyBIndex"), SchemaAction.REINDEX).get()
mgmt.commit()
mgmt.awaitGraphIndexStatus(graph, 'keyBIndex').status(SchemaStatus.ENABLED).call()


g.V().hasLabel("labelA").has("propertyKeyB","value").has("propertyKeyA","value").valueMap()

1) будет ли приведенный выше запрос использовать оба индекса или только labelA_KeyAIndex ?

IЯ использую propertyKeyB со многими другими метками на графике, поэтому я создал отдельный индекс для propertyKeyB keyBIndex без указания indexOnly(label).

Заранее спасибо

1 Ответ

0 голосов
/ 28 июля 2018

Вы можете проверить поведение, используя шаг profile() на вашем обходе

gremlin> g.V().hasLabel("labelA").has("propertyKeyB","value").has("propertyKeyA","value").valueMap().profile()
==>Traversal Metrics
Step                                                               Count  Traversers       Time (ms)    % Dur
=============================================================================================================
JanusGraphStep([],[~label.eq(labelA), propertyK...                                             0.422    94.51
    \_condition=(~label = labelA AND propertyKeyB = value AND propertyKeyA = value)
    \_isFitted=true
    \_query=multiKSQ[1]@2147483647
    \_index=keyBIndex
    \_orders=[]
    \_isOrdered=true
  optimization                                                                                 0.255
PropertyMapStep(value)                                                                         0.024     5.49
                                            >TOTAL                     -           -           0.447        -

В выводе профиля вы можете увидеть, что keyBIndex - это то, что выбрано.

...