【问题标题】:Neo4j Community Edition out of the box peformance on WindowsNeo4j 社区版在 Windows 上的开箱即用性能
【发布时间】:2014-03-30 10:08:26
【问题描述】:

我是 Neo4j 的新手,发现查询时间与 MySQL 相比相当高。

在演示文稿中,我听说查询时间大约为 2 毫秒,但我得到 80 毫秒,即使对于 Movie Graph 教程中最简单的查询也是如此。 对于其他(非常小的)数据集,我的查询时间约为 150-250 毫秒

如何使用 Neo4j 获得更好的性能?

我在具有 8GB RAM、SSD、i5 的 Windows 8 笔记本电脑上使用二进制形式 (zip) 的 Neo4j Server 2.0.1 Community Edition Stable Release。从浏览器界面执行查询。

MATCH (tom {name: "Tom Hanks"}) RETURN tom
Returned 1 row in 189 ms

MATCH (tom {name: "Tom Hanks"}) RETURN tom
Returned 1 row in 79 ms

MySQL (InnoDB) 中的类似查询大约需要 4 毫秒:

SET PROFILING=1;
SELECT * FROM person WHERE name = "Tom Hanks";
SHOW PROFILES;

+----------+------------+-----------------------------------------------+
| Query_ID | Duration   | Query                                         |
+----------+------------+-----------------------------------------------+
|        1 | 0.00369300 | SELECT * FROM person WHERE name = "Tom Hanks" |
+----------+------------+-----------------------------------------------+
1 row in set (0.00 sec)

执行Neo4j.bat 时出现启动错误(异常)。会不会是这个问题?

Can't load log handler "java.util.logging.FileHandler"
java.io.IOException: Couldn't get lock for data/log/neo4j.%u.%g.log

【问题讨论】:

  • 正如迈克尔在他的回答中提到的,您应该使用带有标签的索引。我只是想澄清一下,您在 MySQL 中的 analogous 查询并不是真正类似的。使用您的 MySQL 查询,您将访问一个 Person 表,其中只有 Person 实体。使用您当前的 Neo4j 查询,您正在筛选 所有 节点(比Persons 的数量显着更多的节点。
  • 你是对的,我的错。我的意图是使用标签(tom:Person ...) 进行查询。然后查询时间降至 65 毫秒。

标签: neo4j


【解决方案1】:

你可能想为

创建一个索引
create index on :Person(name);

并像这样使用您的查询:

MATCH (tom:Person {name: "Tom Hanks"}) RETURN tom

请注意,浏览器测量的不仅仅是查询,还有用于加载可视化数据和其他信息的额外往返。

对我来说,在浏览器中会导致:

Returned 1 row in 38 ms 

如果我在我的机器上执行您的查询,但使用 neo4j-shell(您也可以使用 http://localhost:7474/webadmin 访问它的网络版本),我会得到:

$ match (n:Person {name:"Tom Hanks"}) return n;
==> +--------------------------------------+
==> | n                                    |
==> +--------------------------------------+
==> | Node[71]{name:"Tom Hanks",born:1956} |
==> +--------------------------------------+
==> 1 row
==> 1 ms

【讨论】:

  • 谢谢!在没有索引的情况下,Web 控制台中的查询需要 20-30 毫秒(尽管第一次执行总是需要更长的时间);使用索引需要 1-4 毫秒。然而,在命令行 shell 中,由于某种原因,查询似乎在 15-20 毫秒时变慢了。
  • 可能涉及更多往返,因为 shell 使用 RMI 与服务器通信。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
相关资源
最近更新 更多