Neo4j 1.9.5(使用spring数据neo4j)查询时间慢

时间:2014-07-17 01:16:36

标签: neo4j spring-data-neo4j

我有一个运行在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
你认为我错过了什么吗?想知道为什么需要这么久!请指教。

由于

1 个答案:

答案 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}