我是 Neo4j.rb 的核心维护者之一,还有上面回答的 Brian Underwood。这不是一个完整的答案,因为我们需要更多地了解您的系统来回答这个问题,但我在这里发布这个是因为它对于一个评论来说太多了。
我的钱花在了您的数据库或系统出现问题上。对于运行 Windows 的用户,我们报告了一个类似的问题——在本地工作时查询缓慢,无法确定原因。请参阅Neo4j.rb 版本 3.0 低性能 RoR,所有查询超过 1024 毫秒。我们无法确定它。在本地,运行完全相同的查询,我第一次运行它时看到 13 毫秒,之后每次运行大约 3 毫秒。索引不会对那么小的数据库产生影响。
限制出现问题的机会并普遍提高性能的方法:
- 使用 Ruby MRI 2.2.0
- 使用 Neo4j 2.1.6 或 2.2.0
- 使用 Mac 或 Linux,而不是 Windows
- 在您的应用中需要
oj
和gemoj_mimic_json
如果您的数据库和应用服务器位于两个不同的网络中,您将看到更长的查询响应。
关于这个简单查询在 MongoDB 和 PostgreSQL 中要快得多的评论:是的,它将是。两者都比 Neo4j.rb 更快地返回简单查询,原因不少于两个:
- 用于连接到这些数据库的 Ruby gem 不使用 REST 接口,它们使用自定义二进制协议。
- 两者都针对快速返回单个记录进行了优化,Neo 针对快速返回大量记录进行了优化。
在发布 Neo4j.rb 4.0 之前,我对 Postgres 和 MongoDB 进行了大量基准测试,并发现了相同的结果:它们在返回单个对象时压垮了我们。(PostgreSQL 是一个了不起的技术通用。)不过,一旦您开始寻找相关对象,事情就会平衡,并且随着您增加复杂性,差异变得更加显着。不幸的是,我没有任何数字要分享,但如果我有时间的话,我很快就会写一篇关于它的博客文章。