【发布时间】: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