在 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 中插入节点非常慢的主要内容,如果未能解决你的问题,请参考以下文章