neo4j - 在 Neo4j 中添加与现有数据的关系
问题描述
从 Neo4j (4.2.3) 开始,我加载了一年的航班数据(7m 行),并想尝试将航班建模为始发地和目的地机场之间的关系。然而,下面的查询只是消耗了内存,两天后还没有完成,所以显然有些不对劲:
MATCH (f:Flight), (dest:Airport), (orig:Airport)
WHERE f.Dest = dest.IATA_Code AND f.Origin = orig.IATA_Code
CREATE (orig)-[r:FlightTo {DeptDateTime:f.DepDT, ArriveDateTime:f.ArrDT, Flight:f.Name}]->(dest)
我可以这样做:
LOAD CSV WITH HEADERS FROM 'file:///flights.csv' AS row
MERGE (o:Org_Airport {Org_IATA:row.Origin})
MERGE (d:Dest_Airport {Dest_IATA:row.Dest})
CREATE (o)-[r:FlightTo {DeptDateTime:row.DepDT, ArriveDateTime:row.ArrDT, Flight:row.Name}]->(d)
虽然这具有工作的优势(即使在合理的时间内),但基本上复制机场并且当所有需要的数据已经在数据库中时再次检查 CSV 文件时感觉很难看。我的图表思维可能并不完全在那里,所以我很感激一些关于添加这样的关系的最佳方法的指导,请记住原始加载文件可能会丢失。
解决方案
你有设置索引吗?查看您的第一个查询,您需要:
CREATE INDEX ON :Flight(Dest);
CREATE INDEX ON :Airport(IATA_Code);
如果您没有在标签/属性上设置索引/约束,则查找/合并将非常慢。
推荐阅读
- android - 是否有任何 Android 设备无法从 GNSS 数据中获取速度?
- c++ - 当两个对象共享同一个地址时如何处理?
- saml - 响应没有任何可以通过主题验证错误的有效断言
- angular - npm i 给出代码:'ETIMEDOUT',errno:'ETIMEDOUT',系统调用:'connect',类型:'system' 错误
- grpc - grpc java中的低级事件
- java - 嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造实例
- c# - 如何选择列表中的列表框项目?
- python - 从 Github 运行 python 代码时出现 Jekins 问题
- python - 如何使用 for 循环以 1m 间隔查找过去 2 年的股票价格?
- html - 调整窗口大小时,我无法摆脱 html css 中的白色边框