1
我有一個嵌入式neo4j服務器與紅寶石在軌道上。加速neo4j密碼查詢
這些配置:
neostore.nodestore.db.mapped_memory=25M
neostore.relationshipstore.db.mapped_memory=240M
neostore.propertystore.db.mapped_memory=230M
neostore.propertystore.db.strings.mapped_memory=1200M
neostore.propertystore.db.arrays.mapped_memory=130M
wrapper.java.initmemory=1024
wrapper.java.maxmemory=2048
大約有15lakh
電影節點。以下查詢需要執行大約5secs
。
MATCH (movie:Movie)
WITH movie, toInt(movie.reviews_count) + toInt(movie.ratings_count) AS weight
RETURN movie, weight as weight
ORDER BY weight DESC
SKIP skip_count
LIMIT 10
這裏的skip_count
隨用戶滾動查看結果而變化。
這另一個查詢其目的是從一個特定的導演獲得電影大約需要9secs
MATCH (movie:Movie) , (director:Director)-[:Directed]->(movie)
WHERE director.name =~ '(?i)DIRECTOR_NAME'
WITH movie, toInt(movie.ratings_count) * toInt(movie.reviews_count) * toInt(movie.rating) AS total_weight
RETURN movie, total_weight
ORDER BY total_weight DESC, movie.rating DESC
LIMIT 10
如何減少查詢執行時間?
嗨Stefan!謝謝回覆。我認爲可以通過這種方式來構建第一個查詢,以提高效率。 MATCH p =(:電影{name:'<顯示的最後一部電影的名字>')) - [:NEXT_WEIGHT * limit] - ()RETURN節點(p)(因爲我可以跟蹤用戶顯示的最後一部電影會話)。 對於第二個查詢:是否有一種方法可以使用'NEXT_WEIGHT'來避免使用'order by'? –
我想單個導演只有100部電影,他擔任導演。如果確保通過索引查找找到director節點,它應該足夠快。 –
是的,它似乎適用於這種情況。但有什麼辦法可以用'NEXT_WEIGHT'關係來執行。這樣它也可以用於其他類似的情況。 –