【发布时间】:2013-12-12 21:41:35
【问题描述】:
这里是 Neo4j 新手,在 Neo4j 2.0.0 社区
我有一个包含 24,000 部电影和 2700 名用户的图形数据库,以及大约 60,000 个用户和电影之间的 LIKE 关系。
假设我有一部特定的电影 (movie1)。
START movie1=node:Movie("MovieId:88cacfca-3def-4b2c-acb2-8e7f4f28be04")
MATCH (movie1)<-[:LIKES]-(usersLikingMovie1)
RETURN usersLikingMovie1;
我可以通过上述查询快速轻松地找到喜欢这部电影的用户。我可以进一步沿着这条路径获得喜欢电影的用户和喜欢电影 1 的人一样的用户。我将这些称为第 2 代用户
START movie1=node:Movie("MovieId:88cacfca-3def-4b2c-acb2-8e7f4f28be04")
MATCH (movie1)<-[:LIKES]-(usersLikingMovie1)-[:LIKES]->(moviesGen1)<-[:LIKES]-(usersGen2)
RETURN usersGen2;
此查询大约需要 3 秒,并返回 1896 个用户。
现在我将这个查询更进一步,以获取上述用户喜欢的电影(第 2 代电影)
START movie1=node:Movie("MovieId:88cacfca-3def-4b2c-acb2-8e7f4f28be04")
MATCH (movie1)<-[:LIKES]-(usersLikingMovie1)-[:LIKES]->(moviesGen1)<-[:LIKES]-(usersGen2)-[:LIKES]->(moviesGen2)
RETURN moviesGen2;
此查询导致 neo4j 在 CPU 利用率为 100% 并使用 4GB 内存的情况下旋转几分钟。然后它发回一个异常“OutOfMemoryError: GC overhead limit exceeded”。
我希望有人可以帮助我并向我解释这个问题。 Neo4j 是否不打算以高性能的方式处理这种深度的查询? 我的 Cypher 查询有问题吗?
感谢您抽出宝贵时间阅读。
【问题讨论】:
-
有机会分享您的数据集吗?
-
您好,请查看上面的评论。
-
抱歉,无法分享。无论如何,它并不是真正的电影数据库。