【问题标题】:NEO4J Match slow vs. MySQLNEO4J 匹配慢与 MySQL
【发布时间】:2015-10-27 17:15:01
【问题描述】:

我是 NEO4J 的新手,但已经使用 MySQL 多年。现在我创建了一个数据库,其中包含 700 000 个用户、800 000 份食谱和 160 万份保存在 NEO4J 中的食谱。

节点的结构是这样的(:User)-[:CREATED]-(:Cookbook)-[:SAVED]-(:Recipe)。所有用户和食谱都是唯一的,但一个用户可以拥有多个食谱,而每本食谱都可以拥有多个食谱。

我使用的是 EC2 m3.x2large,所以速度非常快。但是性能很差。这个查询:

MATCH (r:Recipe{recipe_id:2987431}) 返回 r;

需要 300-500 毫秒,mysql 可以在 2 毫秒左右执行。

这是常见的还是我配置的服务器都错了?

(我在 :Recipe(recipe_id) 上有一个索引)

【问题讨论】:

  • 您的索引是唯一约束吗?比如CREATE CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE?
  • 不,这不正常,因为这里您只使用索引。例如,在我的计算机上,这种具有相同容量的查询需要 10 毫秒。要测试查询,您使用浏览器还是 neo4j-shell ?
  • 谢谢!现在我在 neo4j-shell 中尝试了它,它只有 6 毫秒,但在 web 界面中仍然很慢......你知道为什么会这样吗?

标签: neo4j


【解决方案1】:

您的索引上线了吗?如果您在控制台中运行:schema,它应该会列出所有的约束/索引,以及它们是否已经被完全扫描并且在线并且可以使用。

【讨论】:

  • 是的,他们都在线。
  • 那真是奇怪……你查了之后有没有做查询?可能是自从您上次查询以来它就上线了(我可能会抓住稻草,但最好检查一下)。索引绝对不应该花那么长时间
  • 尝试同时运行PROFILE MATCH (r:Recipe{recipe_id:2987431}) RETURN r 看看它在做什么(网络控制台应该在这里给你很好的输出)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
相关资源
最近更新 更多