通常我在从CSV文件加载时构建节点之间的关系 . 这是一个写cypher的语句,我这次用它来 Build 节点之间的关系 . 语言节点为39K,描述节点为2M .
MATCH (d:Description),(l:Language)
> WHERE d.description_language = l.language_name
> CREATE (d)-[r:HAS_LANGUAGE]->(l);
经过一段时间,运行我得到的错误是:
Self-suppression not permitted
我已经为关系中使用的属性创建了索引 .
Indexes
...
ON :Description(woka_id) ONLINE
ON :Description(description_language) ONLINE
ON :Language(language_id) ONLINE (for uniqueness constraint)
ON :Language(language_name) ONLINE (for uniqueness constraint)
...
我在这里做错了导致这么长时间来完成关系创建(超过10个小时)?
2 回答
由于您要从每个描述节点创建关系,并且有2M的关系,我只需抓取尚未匹配的描述并以较小的批次执行 .
就像是...
您正在过滤步骤处理非常大的笛卡尔积:
您可以尝试
MATCH
Descriptions
,将它们与description_language
和CREATE
组合起来:如果查看此查询的
PROFILE
,您会看到DB命中数较少(限制第一个MATCH
中的描述数量以进行测试) .一般来说,我认为最好的方法是在创建节点时使用CSV文件生成关系,即执行此应用程序端,而不是数据库 .