這是關於大型子圖分頁結果集原始問題的後續步驟。Neo4j/Cypher默認rel-type鏈排序問題
Neo4j/Cypher effective pagination with order by over large sub-graph
回顧一下節點-REL結構:
(:User)-[:FOLLOWS {timestamp}]->(:User)
如所建議的通過@邁克爾衣架爲了通過子句REL-型鏈已被除去應以連續的順序返回跟隨最新追隨者的時間戳。
MATCH (u:User {Id:{id}})<-[f:FOLLOWS]-(follower)
WHERE f.timestamp <= {timestamp}
RETURN follower
LIMIT 100
問題是,在一般情況下,這是行不通的。
我發現的是如果:User
節點有50或更少:FOLLOWER
關係一切工作正常。追隨者總是按時間戳順序排列,最近排在最前面。但是如果你有更多的50 :FOLLOWER
關係,最後50個追隨者總是返回倒數,最老的倒數第一。
即如果:User
有100個追隨者,並且您按照上面的方式查詢它們,您將得到列表,其中前50個從最新到最舊排序,最後50個從最舊到最新排列。一般來說,你在任何情況下,這種順序,其中的追隨者數量超過50
任何人都可以對這種行爲的建議。
如果我將dense_node_treshod設置爲1並且圖中的密集節點很密集會產生什麼後果?我明白你的意圖是將rel-type重構爲節點,但它會產生其他不必要的複雜性。 – drgraduss
很好的問題,從未嘗試'dense_node_treshold = 1'。由於遍歷首先需要查找正確的鏈,所以我認爲一切都會稍微慢一些。但請注意,您無法更改'dense_node_treshold'。請注意,'dense_node_treshold'僅在創建初始存儲時使用 - 您無法在現有的圖形數據庫中對其進行更改。 –