【问题标题】:neo4j cypher taking time to set relationshipneo4j cypher 需要时间来建立关系
【发布时间】:2016-07-10 02:57:59
【问题描述】:

我对 neo4j 比较陌生。 我已经导入了 1200 万条记录的数据集,并在两个节点之间创建了关系。创建关系时,我忘记将属性附加到关系。现在我正在尝试如下设置关系的属性。

LOAD CSV WITH HEADERS FROM 'file:///FileName.csv' AS row
MATCH (user:User{userID: USERID})
MATCH (order:Order{orderID: OrderId}) 
MATCH(user)-[acc:ORDERED]->(order)
SET acc.field1=field1,
acc.field2=field2;

但是这个查询的执行时间太长了, 我什至尝试在用户和订单节点上使用索引。

MATCH (user:User{userID: USERID}) USING INDEX user:User(userID)

以后不能为关系创建新属性吗? 请告诉我,我怎样才能快速有效地进行此操作。

【问题讨论】:

  • 您能否确认您已在 :User(userID) 和 :Order(orderID) 上创建了索引?如果没有这些索引,USING INDEX 根本不会改善这一点(它仍然是一个按标签扫描的节点,这会受到您拥有的数据量的影响),尽管它仍然会运行而不会出现错误。
  • 也许你可以把它变成答案@InverseFalcon ?
  • 是的,我已经创建了约束并且它们也是在线的。我在运行之前检查了这些。
  • 听起来你目前做的一切都是正确的。可能值得对 PROFILE 进行一次更新并将其添加到您的描述中,这可能会给我们一些额外的线索。

标签: neo4j set relationship


【解决方案1】:

您还忘记在查询前加上 USING PERIODIC COMMIT,

您的查询将为 2400 万次更改(属性更新)建立事务状态,并且没有足够的内存来保存所有这些状态。

您还忘记了来自 CSV 的数据的 row.,并且这些名称的拼写不一致。

如果您从 neo4j 浏览器运行此程序,请注意任何 黄色 警告标志。

运行

CREATE CONSTRAINT ON (u:User) ASSERT u.userID IS UNIQUE;

运行

CREATE CONSTRAINT ON (o:Order) ASSERT o.orderID IS UNIQUE;

运行

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:///FileName.csv' AS row
with row.USERID as userID, row.OrderId as orderID
MATCH (user:User{userID: userID})
USING INDEX user:User(userID)
MATCH (order:Order{orderID: orderID}) 
USING INDEX order:Order(orderID)
MATCH(user)-[acc:ORDERED]->(order)
SET acc.field1=row.field1, acc.field2=row.field2;

【讨论】:

  • 我使用了定期提交,并且约束也在线。仍然需要太多时间。
猜你喜欢
  • 1970-01-01
  • 2013-04-06
  • 2014-02-13
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多