微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Neo4j 中添加与现有数据的关系

如何解决在 Neo4j 中添加与现有数据的关系

从 Neo4j (4.2.3) 开始,我加载了一年的航班数据(700 万行),并想尝试将航班建模为出发地和目的地机场之间的关系。然而,下面的查询只是消耗了内存,两天后还没有完成,所以显然有些不对劲:

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);

如果您没有在标签/属性上设置索引/约束,查找/合并将非常缓慢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。