GraphAwareの時間ツリーと空間rツリーを設定して、グラフの大きなノードセットを参照できます。私は時間と空間でこれらのレコードを検索しようとしています。個別Neo4jで複数の手続き呼び出しの結果を効率的にフィルタリングするには
私は約5秒でこれらのクエリからの結果を収集することができます:私は、パフォーマンスが大幅に低下し、これらの結果をフィルタ処理しようとすると
WITH
({start:1300542000000,end:1350543000000}) as tr
CALL ga.timetree.events.range(tr) YIELD node as n
RETURN count(n);
> ~ 500000 results
WITH
({lon:120.0,lat:20.0}) as smin, ({lon:122.0,lat:21.0}) as smax
CALL spatial.bbox('spatial_records', smin, smax) YIELD node as n
RETURN count(n);
> ~ 30000 results
。 Neo4jは既にシステムで大量のメモリを使い果たしているので、このコマンドのメモリフットプリントがシステム上であまりにも多く、クエリが終了しないという印象を受けています。
WITH
({start:1300542000000,end:1350543000000}) as tr,
({lon:120.0,lat:20.0}) as smin, ({lon:122.0,lat:21.0}) as smax
CALL ga.timetree.events.range(tr) YIELD node as n
CALL spatial.bbox('spatial_records', smin, smax) YIELD node as m
WITH COLLECT(n) as nn, COLLECT(m) as mm
RETURN FILTER(x in nn WHERE X in mm);
(私はこれらのコマンドを実行するのNeo4j-シェルに使用しています)私は、効率的にこれらの二つの文のコールの結果をフィルタリングするための最良の方法は何であるか疑問に思って。私はREDUCE句を使用しようとしましたが、構文を理解できませんでした。
これは、私がデータベースに発行する最も一般的なタイプのクエリであることを考えると、これを行うには良い方法です(時間ツリーとrツリーを使用して、ノード)?私は、neo4jの中で、単一の構造体で空間と時間の両方の索引付けをサポートする他のツールを見つけていないので、これは私の現在の実装です。
お返事ありがとうございます。私は間違いなくJavaの世界に入って、自分自身を呼び出すことができるかどうかを検討しました。これは、並行して実行される結果に低コストのハッシュベースの結合を何らかの形で実行するかどうかを示します。しかし、正直言って私はJavaに多くの経験を持っていないので、私はほとんど怖がらない。 私はapocライブラリを簡単に見て、面白い呼び出しを見つけました。まだそこに何かが役立っているかどうかはわかりません。 – spanishgum