首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Neo4j.rb慢速查询

Neo4j.rb慢速查询
EN

Stack Overflow用户
提问于 2015-02-02 17:34:23
回答 2查看 328关注 0票数 0

我有Neo4j v2.1.6 (默认配置)和Neo4j.rb v4.1.0。所有查询都很慢,大约在50 All左右。我在db中只有5个节点。

例如:

代码语言:javascript
复制
User.find_by(person_id: 826268332)

CYPHER 47ms MATCH (n:`User`) WHERE (n.person_id = {n_person_id})  RETURN n LIMIT {limit_1} | {:n_person_id=>826268332, "limit_1"=>1}

哪里会有问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-02 22:47:55

我是Neo4j.rb的核心维护人员之一,以及Brian,他在上面回答道。这并不完全是一个完整的答案,因为我们需要了解更多关于您的系统来回答这个问题,但是我在这里发布这篇文章是因为它对于一个评论来说太多了。

我的钱在你的数据库或者你的系统上出了问题。我们有一个类似的问题--在本地工作时查询速度慢,没有原因可以确定--对于运行Windows的用户来说。见Neo4j.rb version 3.0 slow performance RoR, over 1024ms for all queries。我们没能把它固定下来。在本地,运行相同的查询时,我第一次运行它时会看到13 3ms,之后每次都会看到~3ms。索引不会对数据库产生那么小的影响。

限制出现问题的机会并普遍提高业绩的方法:

  • 使用Ruby 2.2.0
  • 使用Neo4j 2.1.6或2.2.0
  • 使用Mac或Linux,而不是Windows
  • 需要应用程序中的ojoj_mimic_json宝石

如果您的db和app服务器位于两个不同的网络中,您将看到类似这样的查询的更长响应。

关于在MongoDB和PostgreSQL中这个简单查询要快得多的评论:是的,它将是这样的。这两种方法都比Neo4j.rb更快地返回简单查询,至少有两个原因:

  • 用于连接到这些do的Ruby宝石不使用REST接口,它们使用自定义的二进制协议。
  • 这两种方法都是为快速返回单个记录而优化的,Neo是为快速返回大组记录而优化的。

在发布Neo4j.rb 4.0之前,我针对Postgres和MongoDB做了大量的基准测试,并发现了相同的结果:当返回单个对象时,它们会粉碎我们。(PostgreSQL是令人惊异的技术通用。)但是,一旦你开始寻找相关的对象,事情就平衡了,当你增加复杂性的时候,差别就变得更大了。不幸的是,我没有任何数字可以分享,但是如果我有时间的话,我会在不久的某个时候写一篇关于它的博客文章。

票数 2
EN

Stack Overflow用户

发布于 2015-02-02 19:32:53

太奇怪了。在neo4j gem中,我经常看到简单的查询在1-5ms左右运行。

为了调试,如果您这样做了呢?

代码语言:javascript
复制
User.where(yeti_person_id: 826268332).first

还有,这给了你什么?

代码语言:javascript
复制
puts User.where(yeti_person_id: 826268332).to_cypher
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28283412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档