2017-04-02 21 views
2

私はneo4jに問題があります。 問題が私の質問なのかどうかわかりません。Neo4j - Javaヒープ領域。間違ったクエリや設定ですか?


イントロ

私はバス/電車路線を保存するアプリケーションを構築する必要があります。 これは私のスキーマです:

ノード

  • Organizaton:ルート/バスなどを持っている会社...
  • ルート:パリ - ベルリン:のようなバス路線。
  • 車両(この場合のバス):ユニークなナンバープレートを使用した魚釣りバス。
  • 停止:緯度と経度のある地図を指します。

重要な関係

  • :これは本当に重要な関係です。 ( - 日、月など。0から6まで)
    • startHour
    • startMinutes
    • endHour
    • endMinutes
    • のdayOfWeek:

    次の関係は、これらのプロパティが含まれています

  • 車両ID

enter image description here


問題

私のクエリは次のとおりです。たとえば

MATCH (s1:Stop {id: {departureStopId}}), (s2:Stop {id: {arrivalStopId}}) 
OPTIONAL MATCH (s1)-[nexts:NEXT*]->(s2) 
WHERE ALL(i in nexts WHERE toInt(i.dayOfWeek) = {dayOfWeek} AND toInt(i.startHour) >= {hour}) 
RETURN nexts 
LIMIT 10 

:私はのdayOfWeekは日曜日(0)とプロパティstartHourで見つかったすべてのnexts関係をしたいです> 11

その後、私は私のnodejsバックエンド上で最終的なオブジェクトを適切に解析して検証します。

私が最初にあったとき、これは... は、今私は10Kの関係を持っていると私のクエリはTIMEOUTの問題やクエリが30代で解決さ​​れてい... 1kの関係で...あまりにも多くの時間を動作します... 私は全くありませんこの問題を解決する方法。 私はドッカーとneo4jを使用して、私は設定のドキュメントを読み込もうとしましたが、私はJavaのしくみがわかりません。

あなたは私を助けることができますか?


UPDATE

あなたのすべての皆さんに感謝! 今のところ私は "allShortestPaths"で解決しましたが、私はすべての関係の名前を変更すると思います(Michael Hunger氏のように)。

+0

また、デフォルトのドッカーイメージは、あまりにも少ないRAMを予約します。これは、env-variableを介してHEAPを増やす必要があります。 4Gまたは8G。 –

答えて

4

あなたが試してみました:

MATCH p=allShortestPaths((s1:Stop {id: {departureStopId}})-[:NEXT*]-> (s2:Stop {id: {arrivalStopId}})) 
WHERE ALL(i in RELS(p) WHERE toInt(i.dayOfWeek) = {dayOfWeek} AND toInt(i.startHour) >= {hour}) 
RETURN rels(p) as nexts 
LIMIT 10 

ので、これは、高速最短経路アルゴリズムを使用する必要があります。サイファーで計画最短経路をする必要が述語に応じて、異なるクエリ・プランにつながることができます

を評価される。内部的に、Neo4jはパスを検索しながら述語を評価できる場合、高速双方向幅優先探索アルゴリズムを使用します。

詳細については、https://neo4j.com/docs/developer-manual/current/cypher/execution-plans/shortestpath-planning/#_shortest_path_with_fast_algorithmを参照してください。

1

これは設定ではありません。クエリを満たすためには、クエリがグラフの各ノードを必ず訪れる必要があります。

インデックスの代わりにTABLE SCANを使用する必要がある場合、問題はリレーショナルデータベースに表示されます。

解決策は、あなたがすでに数日間持っているように、数時間バケツを追加することだと思います。数分かかる場合は、1日分の96分15分のバケツを作ってください。これにより、クエリオプティマイザに最適なチャンスが与えられます。

2

あなたのプロフィールを共有できますか?

私はあなたが私の代わりに、オプションの試合のコストと最短経路やダイクストラを使用することになり:Stop(id)

上の制約を持っていると推定。 OPTIONAL MATCHは、何億ものパスをすべて見つけようとします。

NEXTの関係を曜日、.e.g :NEXT_MO, :NEXT_THUにグループ化すると、データの1/7だけを見ることができます。

関連する問題