2016-09-30 5 views
1

. Каков наилучший способ написать запрос gremlin - это выполнить скрипты groovy или tinkerpop?Каков наилучший способ написать запрос gremlin - это выполнить скрипты groovy или tinkerpop.

Например, для сортировки нескольких вершин с меткой Сотрудник на основе их даты присоединения.

Каков наилучший способ извлечения?

ли

g.V().hasLabel('Employee').sort{a,b->a.value('DateOfJoining')<=>b.value('DateOfJoining')} 

или

g.V().hasLabel('Employee').order().by('DateOfJoining',incr) 

здесь я использовал <=> оператор в заводной сценария и во втором я использовал шаг обычного порядка в tinkerpop.

Оба запросы работает в гремлине консоли но один из них лучше всего подходит для поиска и как консоль гном интерпретировать как запросы

ответ

3

Лучше избегать groovy collection methods, так как основная база данных графа не может интерпретировать их. Они существуют за пределами Traversal. Рассмотрим этот пример, как ваша:

gremlin> g.V().hasLabel("person").order().by('name',incr).explain() 
==>Traversal Explanation 
=============================================================================================================================== 
Original Traversal     [GraphStep(vertex,[]), HasStep([~label.eq(person)]), OrderGlobalStep([[value(name), incr]])] 

ConnectiveStrategy   [D] [GraphStep(vertex,[]), HasStep([~label.eq(person)]), OrderGlobalStep([[value(name), incr]])] 
RepeatUnrollStrategy   [O] [GraphStep(vertex,[]), HasStep([~label.eq(person)]), OrderGlobalStep([[value(name), incr]])] 
InlineFilterStrategy   [O] [GraphStep(vertex,[]), HasStep([~label.eq(person)]), OrderGlobalStep([[value(name), incr]])] 
MatchPredicateStrategy  [O] [GraphStep(vertex,[]), HasStep([~label.eq(person)]), OrderGlobalStep([[value(name), incr]])] 
PathRetractionStrategy  [O] [GraphStep(vertex,[]), HasStep([~label.eq(person)]), OrderGlobalStep([[value(name), incr]])] 
IncidentToAdjacentStrategy [O] [GraphStep(vertex,[]), HasStep([~label.eq(person)]), OrderGlobalStep([[value(name), incr]])] 
AdjacentToIncidentStrategy [O] [GraphStep(vertex,[]), HasStep([~label.eq(person)]), OrderGlobalStep([[value(name), incr]])] 
FilterRankingStrategy  [O] [GraphStep(vertex,[]), HasStep([~label.eq(person)]), OrderGlobalStep([[value(name), incr]])] 
RangeByIsCountStrategy  [O] [GraphStep(vertex,[]), HasStep([~label.eq(person)]), OrderGlobalStep([[value(name), incr]])] 
TinkerGraphStepStrategy  [P] [TinkerGraphStep(vertex,[~label.eq(person)]), OrderGlobalStep([[value(name), incr]])] 
ProfileStrategy    [F] [TinkerGraphStep(vertex,[~label.eq(person)]), OrderGlobalStep([[value(name), incr]])] 
StandardVerificationStrategy [V] [TinkerGraphStep(vertex,[~label.eq(person)]), OrderGlobalStep([[value(name), incr]])] 

Final Traversal     [TinkerGraphStep(vertex,[~label.eq(person)]), OrderGlobalStep([[value(name), incr]])] 

Когда вы делаете explain() операцию, вы можете увидеть, как выглядит Traversal к основной базе данных графа. Если бы база данных была способна оптимизировать на order() в этом случае, она могла бы воспользоваться этим и стать более эффективной. Если вы просто отправили g.V().hasLabel("person") и затем переключились на методы groovy collection, базовая база данных только узнала бы, что вы пытались получить список «личных» вершин и не знаете, что вы также намеревались их упорядочить (что затем произойдет в памяти с использование groovy sort).

 Смежные вопросы

  • Нет связанных вопросов^_^