我有Neo4j v2.1.6(默认配置)和Neo4j.rb v4.1.0。所有查询都在50ms左右。我在db中只有5个节点。
例如:
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}
哪里可能有问题?
答案 0 :(得分:2)
这很奇怪。在neo4j gem中,我经常会看到简单的查询在大约1-5毫秒内运行。
对于调试,如果你这样做会怎么样?
User.where(yeti_person_id: 826268332).first
另外,这会给你带来什么?
puts User.where(yeti_person_id: 826268332).to_cypher
答案 1 :(得分:2)
我是Neo4j.rb的核心维护者之一,以及上面回复的Brian Underwood。这不完全是一个完整的答案,因为我们需要了解更多关于你的系统的答案,但我在这里发布这个,因为它对于一个评论来说太过分了。
我的钱是您的数据库或系统出错了。对于运行Windows的用户,我们报告了类似的问题 - 本地工作时查询速度慢,无法确定。见Neo4j.rb version 3.0 slow performance RoR, over 1024ms for all queries。我们无法将其固定下来。在本地,运行完全相同的查询,我第一次运行时看到13ms,之后每次运行约3ms。索引在一个小的数据库中不会产生影响。
如何限制问题的可能性并通常提高绩效:
oj
和oj_mimic_json
宝石如果您的数据库和应用服务器位于两个不同的网络中,您将看到更长的响应。
关于在MongoDB和PostgreSQL中这个简单查询要快得多的评论:是的,它会成为。这两个返回简单查询的速度比Neo4j.rb快,原因不少于两个:
在发布Neo4j.rb 4.0之前,我对Postgres和MongoDB做了大量的基准测试,并发现了相同的结果:他们在返回单个对象时粉碎了我们。 (PostgreSQL是一项了不起的技术。)一旦你开始寻找相关的对象,事情就会平衡,当你增加复杂性时,差异变得更加显着。不幸的是,我没有任何数字可以分享,但如果我有时间的话,我会很快发表一篇博文。