我有一个运行在ec2 m1.medium实例中的neo4j社区版1.9.5(大约4gb ram)。我有大约300个节点,800个关系和大约2000个属性。 Neo4j正在REST模式下运行。下面是我的applicationContext.xml:
<beans profile="default">
<bean class="org.springframework.data.neo4j.rest.SpringRestGraphDatabase" id="graphDatabaseService">
<constructor-arg index="0" value="http://localhost:7474/db/data/"/>
</bean>
<neo4j:config graphDatabaseService="graphDatabaseService"/>
</beans>
现在,我在下面有这个查询,它显示了你的朋友喜欢的所有电影,大约需要10秒才能返回! :
start user=node(*)
match user-[friend_rela:FRIENDS]-friend,friend-[movie_rela:LIKE]->movie
where has(user.uid) and user.uid={0}
return distinct movie,movie_rela,friend
order by movie_rela.timeStamp desc
skip {1} " +
limit {2}
我已将以下内容编入索引:
我在adming界面中显示的索引显示我已将以下内容编入索引:
节点:
movieId (from Movie)
__types__
Movie
uid (from User)
User
关系:
IsFriends
Like
__rel_types__
timeStamp
我还将neo4j-wrapper.conf文件更改为具有以下堆大小
# Initial Java Heap Size (in MB)
wrapper.java.initmemory=512
# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=2000
你认为我错过了什么吗?想知道为什么需要这么久!请指教。
由于
答案 0 :(得分:0)
您的查询效率很低,它基本上遍历整个图形多次。您应该使用索引查找来查找查询的起点,然后从起点进行遍历 - 这样您就可以进行本地查询而不是全局查询:
start user=node:Movie(uid={0})
match (user)-[friend_rela:FRIENDS]-(friend)-[movie_rela:LIKE]->(movie)
return distinct movie,movie_rela,friend
order by movie_rela.timeStamp desc
skip {1} limit {2}