2017-04-02 16 views
2

我有一個neo4j的問題。 我不知道如果問題是我的查詢或其他東西。Neo4j - Java堆空間。錯誤的查詢或設置?


介紹

我必須建立一個存儲巴士/火車路線的應用程序。 這是我的架構:

節點

  • Organizaton:公司具有路由/總線等。
  • 路線:巴黎 - 柏林:喜歡巴士路線。
  • 車輛(在這種情況下,公交車):帶有獨特車牌的Fisical巴士。
  • 停止:指向經緯度的地圖。

重要關係

  • 下一個:這是一個非常重要的關係。

下人際關係包含這些屬性:

  • startHour
  • startMinutes
  • endHour
  • endMinutes
  • 一週中的某天(從0到6 - 週日,週一等)
  • vehicleId

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 

例如:我想找到的所有的nextS關係,其中一個dayOfWeek是星期天(0)和財產startHour> 11

之後,我ü通過分析和驗證我的nodejs後端的最終對象。

這工作時,我是在開始。與1K關係.. 現在我有10K的關係,我的查詢有超時問題或查詢在30年代解決了..太多時間...... 我沒有想法如何解決這個問題。 我使用docker的neo4j和我試圖閱讀設置文檔,但我不知道Java如何工作。

你能幫助我嗎?


UPDATE

謝謝大家傢伙! 現在我解決了「allShortestPaths」,但我想我會重新命名所有關係(如Michael Hunger所說的)。

+0

此外,默認泊塢窗圖像保留太少的RAM,你必須通過env變量增加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 

這應該使用快速最短路徑算法,因爲:

在Cypher支架規劃最短路徑可能會導致取決於需要是謂詞不同的查詢計劃評估。在內部,如果可以在搜索路徑時評估謂詞,Neo4j將使用快速雙向廣度優先搜索算法。

詳情請參閱https://neo4j.com/docs/developer-manual/current/cypher/execution-plans/shortestpath-planning/#_shortest_path_with_fast_algorithm

1

這不是設置;事實上,您的查詢必須訪問圖中的每個節點才能滿足查詢。

當必須使用TABLE SCAN而不是索引時,問題會在關係數據庫中顯示。

我認爲解決方案是添加桶幾個小時,就像你已經有幾天。如果你必須有分鐘數,可以製作96個十五分鐘的水桶來放置一天。這將爲查詢優化器提供最佳機會。

2

你能分享你的個人資料。

我相信你有:Stop(id)

約束我會用最短路徑或使用的Dijkstra成本,而不是可選的比賽。 可選匹配將嘗試找到所有這些數以億計的路徑並過濾它們。

按照星期幾,例如:NEXT_MO, :NEXT_THU將您的NEXT關係進行分組可能是有意義的,因此您只能查看1/7的數據。