【问题标题】:neo4j - endless queryneo4j - 无休止的查询
【发布时间】:2016-05-23 21:20:34
【问题描述】:

我有一个与 neo4j 和 bulkimport 相关的问题。 我写了一个密码查询,它不起作用并且需要很长时间才能崩溃。 我通过 py2neo 插入此语句。其他声明工作正常。 "

MATCH (own:Typea {hash:"a"})
MATCH (prev:Typea {hash:"b"}) - [c:CRED] -> (o:Typeb{index:0})
CREATE (o) - [s:SPAN] -> (own) 

" 我的数据库因此 java 错误而崩溃:“超出 gc 开销限制”。 当我手动搜索节点时,我得到一个 MATCH 有什么建议吗?

最好的问候 弗兰克

【问题讨论】:

  • 你能分享你的查询的配置文件输出吗?
  • 你有多少 Typea {hash:"a"} 和多少 Typea {hash:"b"} ?它会在它们之间创建一个叉积。
  • 你使用哪个 neo4j 版本?
  • 没有输出...查询一直持续到 java GC 错误。我有超过 30 万个来自 TypeA 的节点和 60 万个来自 TypeB 的节点。正如我所说,它是通过 py2neo 批量导入的,当我从浏览器手动执行查询时,一切都很好。我使用版本 2.3.3

标签: neo4j cypher py2neo


【解决方案1】:

在下文中,我假设您问题中的 typea 实际上应该是 Typea

为了帮助最大限度地减少 MATCH 子句(这也可能解决 GC 错误)所需的时间和资源,请确保您有 created indexes

CREATE INDEX ON :Typea(hash);
CREATE INDEX ON :Typeb(index);

[更新]

此外,您可能只是想建立大量的关系。此查询将显示您将尝试创建多少关系:

MATCH (own:Typea {hash:"a"}), (:Typea {hash:"b"})-[:CRED]->(o:Typeb{index:0})
RETURN COUNT(*);

如果结果是一个非常大的数字,您可以迭代调用以下查询(一次只创建 1000 个 CRED 关系),直到查询返回小于 1000 的值:

MATCH (own:Typea {hash:"a"}), (:Typea {hash:"b"})-[:CRED]->(o:Typeb{index:0})
WHERE NOT (o)-[:SPAN]->(own)
WITH o, own
LIMIT 1000
CREATE (o)-[:SPAN]->(own)
RETURN COUNT(*);

您可以酌情调整1000 限制。

【讨论】:

  • 是的,您的假设是正确的。我对这些属性有索引。当我手动搜索时,响应时间很快。我认为问题必须在创建的关系中。
  • 谢谢,我检查了您的查询。计数为 1,根据定义,它只能为 o。属性哈希是唯一的。每个 TypeA 都有 n 个 TypeB 关系,它们的索引是唯一的。我通过 py2neo 创建了索引:“self.graph.schema.create_uniqueness_constraint('TypeA','hash')”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
相关资源
最近更新 更多