我们有一个60M(每个节点有一个属性)节点和300个关系的图表。 当我们尝试查询FOAF时,结果非常慢 - 20-40秒(取决于用户拥有多少关系)
我们的Neo版本是2.0.0-M05,Neo服务器是CentOs6,8核(4x2 CPU),64GB RAM。
这是我们正在使用的查询:
START n=node:node_auto_index(user_id = 'test')
MATCH n-[:FRIEND_OF*2..2]-friend_of_friend
WHERE not(n-[:FRIEND_OF]-friend_of_friend) RETURN friend_of_friend.user_id, COUNT(*)
ORDER BY COUNT(*) DESC limit 20;
我们尝试使用带参数的REST执行查询 - 但仍然需要花费很多时间。
Neo参数我们改变了:
neostore.nodestore.db.mapped_memory=3G
neostore.relationshipstore.db.mapped_memory=15G
neostore.propertystore.db.mapped_memory=3G
neostore.propertystore.db.strings.mapped_memory=100M
neostore.propertystore.db.arrays.mapped_memory=100M
还要更改JVM参数 -
wrapper.java.maxmemory=32768
这看起来不像正常行为。这可能是什么原因? 我们如何才能改善查询时间?
这是个人资料输出:
==> ColumnFilter(symKeys=["friend_of_friend.user_id", " INTERNAL_AGGREGATEc9bc16db-8fc8-4aba-a4fc-04789a2a712d"], returnItemNames=["friend_of_friend.user_id", "COUNT(*)"], _rows=50, _db_hits=0)
==> Top(orderBy=["SortItem(Cached( INTERNAL_AGGREGATEc9bc16db-8fc8-4aba-a4fc-04789a2a712d of type Long),false)", "SortItem(Cached(friend_of_friend.user_id of type Any),true)"], limit="Literal(50)", _rows=50, _db_hits=0)
==> EagerAggregation(keys=["Cached(friend_of_friend.user_id of type Any)"], aggregates=["( INTERNAL_AGGREGATEc9bc16db-8fc8-4aba-a4fc-04789a2a712d,CountStar())"], _rows=7142, _db_hits=0)
==> Extract(symKeys=["friend_of_friend", "n", " UNNAMED62"], exprKeys=["friend_of_friend.user_id"], _rows=12969, _db_hits=12969)
==> Filter(pred="NOT(PatternPredicate((friend_of_friend)-[ UNNAMED109:FRIEND_OF]-(n)}))", _rows=12969, _db_hits=0)
==> TraversalMatcher(trail="(n)-[:FRIEND_OF*2..2]-(friend_of_friend)", _rows=16455, _db_hits=16810)