【问题标题】:Neo4j - Java heap space. Wrong query or settings?Neo4j - Java 堆空间。错误的查询或设置?
【发布时间】:2023-03-12 05:30:01
【问题描述】:

我对 neo4j 有疑问。 我不知道问题是我的查询还是其他原因。


简介

我必须构建一个存储公共汽车/火车路线的应用程序。 这是我的架构:

节点

  • 组织:拥有路线/巴士等的公司。
  • 路线:巴士路线,例如:巴黎 - 柏林。
  • 车辆(在这种情况下是公共汽车):具有独特车牌的公车。
  • 停靠点:地图上的经纬度点。

重要关系

  • NEXT:这是一个非常重要的关系。

NEXT 关系包含这些属性:

  • 开始时间
  • 开始分钟
  • 结束时间
  • 结束分钟
  • dayOfWeek(从 0 到 6 - 太阳、星期一等)
  • 车辆标识


问题

我的查询是:

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 为 Sunday (0) 且属性 startHour > 11 的所有 nexts 关系

之后,我通常会在我的 nodejs 后端解析和验证最终对象。

这在我刚开始时有效.. 有 1k 关系.. 现在我有 10k 关系,我的查询有一个 TIMEOUT 问题或查询在 30 秒内解决......太多时间...... 我不知道如何解决这个问题。 我将 neo4j 与 docker 一起使用,并尝试阅读设置文档,但我不知道 Java 是如何工作的。

你们能帮帮我吗?


更新

谢谢大家! 现在我用“allShortestPaths”解决了,但我想我会重命名所有关系(就像 Michael Hunger 说的那样)。

【问题讨论】:

  • 此外,默认 docker 映像保留的 RAM 太少,您必须通过 env-variable 将 HEAP 增加到例如4G 或 8G 取决于。

标签: java docker database-design neo4j cypher


【解决方案1】:

你试过了吗:

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

【讨论】:

    【解决方案2】:

    你能分享你的个人资料吗?

    我认为您对:Stop(id) 有限制

    我会使用最短路径或带成本的 dijkstra,而不是可选匹配。 OPTIONAL MATCH 将尝试找到所有此类路径,这些路径数以亿计,并在它们经过时对其进行过滤。

    NEXT 关系按星期几分组可能是有意义的,例如:NEXT_MO, :NEXT_THU,这样您只查看1/7 的数据。

    【讨论】:

      【解决方案3】:

      这不是设置;事实上,您的查询必须访问图中的每个节点才能满足查询。

      当必须使用 TABLE SCAN 而不是索引时,问题会在关系数据库中出现。

      我认为解决方案是添加数小时的存储桶,就像您已经使用了数天一样。如果您必须有分钟,请制作 96 个 15 分钟的桶来覆盖一天。这将为查询优化器提供最佳机会。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-09
        • 2016-12-19
        • 1970-01-01
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多