2016-09-30 4 views
1

gremlinクエリを書く最も良い方法は、groovyスクリプトまたはtinkerpopのステップですか?gremlinクエリを書く最良の方法は、groovyスクリプトまたはtinkerpopのステップです。

たとえば、結合の日付に基づいてEmployeeというラベルを持つVerticesのセットをソートする場合。

検索の良い方法はどれですか?

はそれが

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の外に存在します。あなたのようなものだ。この例を考えてみましょう:あなたはexplain()操作を行うと

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]])] 

、あなたはTraversalは、基礎となるグラフデータベースにどのように見えるかを確認することができます。この場合、データベースがorder()で最適化できれば、それを利用してより効率的になる可能性があります。単にg.V().hasLabel("person")を提出してgroovyのコレクションメソッドに切り替えただけでは、基礎となるデータベースは、あなたが「人」の頂点のリストを取得しようとしていて、あなたもそれらを注文しようとしていないことを知っています。 Groovyの使用sort)。

関連する問題