在 neo4j 中插入节点非常慢

Posted

技术标签:

【中文标题】在 neo4j 中插入节点非常慢【英文标题】:insert node in neo4j is very slow 【发布时间】:2015-06-22 15:53:13 【问题描述】:

我试图在我的图表中插入一个没有任何关系的节点,它需要 1/10 秒,所以当我需要插入 10 个节点时,这应该需要 1 秒,这与我在我的谷歌搜索了一些声称在 1 秒内插入 30k 个节点的人。 我使用带有密码查询的 neo4jclient 来做到这一点:

            gclient.Cypher
   .Create("(p:Post newPost)")
   .WithParams((new
   
       newPost = post
   ))
   .ExecuteWithoutResults();

有什么我想念的吗?在此先感谢

编辑:我将 neo4jclient 与 .net 一起使用。

【问题讨论】:

【参考方案1】:

我猜您正在使用 REST API 客户端,即连接到 Web 端点。这当然涉及通过多个协议层(JSON、HTTP 等),而且速度往往较慢。

在 1 秒内处理 30k 个节点的人没有通过 REST API,他们可能正在使用 batch insertion、import tool,或者可能是 LOAD CSV。

【讨论】:

请注意,这也取决于 api 客户端的性能(例如实例化等),1 个节点的 100 毫秒非常慢,我可以通过其余 api 在大约 180 毫秒内运行 1200 条密码语句. @Christophe Willemsen ,我可以通过电子邮件与您联系吗?我对此有很多疑问,但如果你不能:),我可以在这里问:你怎么能达到这样的结果?提前致谢。 答案很简单,一个事务中的小语句和 commit();不幸的是,对于 .net,我无法提供太多帮助 我认为 Christophe 所说的是,在写入图表时,您必须考虑许多不同的事情。有 REST 的开销/效率低下,有驱动程序,但也有 ACID 事务的开销。在许多情况下,您将需要/想要调整您正在执行的交易的大小。如果以原子方式开始/提交每一次写入,将会有很大的开销。如果在 1 个事务中将多个语句一起批处理,则每次写入的开销会更小。我相信这就是“一笔交易中的小声明”的意思。 一般来说,我认为这里的每个人都说得对——你唯一的问题是neo4jclient 目前不处理交易。如果您希望获得这种速度并且它只是一次性类型的东西(例如初始化) - 我会查看导入工具或加载 csv,如@FrobberOfBits 所说。【参考方案2】:

您还应该检查您的索引和约束。独特的约束会显着减慢插入和更新速度。

【讨论】:

以上是关于在 neo4j 中插入节点非常慢的主要内容,如果未能解决你的问题,请参考以下文章

使用 REST 优化 Neo4j 的大批量批量插入

Neo4j 插入需要更多时间

excel 2010/2013 插入行非常慢

使用 UCanAccess 从大文本文件中插入数据非常慢

SQL插入非常慢[关闭]

使用 Spring Boot 和 Neo4j 通过 REST API 插入实体时出错