【发布时间】: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