0
我認爲這很容易,因爲我有一個典型的圖形用例:展開一個節點。Neo4J:展開帶有兒童兒童節點(性能)
MATCH (s:Entity)-[]-(dest) WHERE s._id = 'xxx'
RETURN dest
問題Nr.1:有時也有很多孩子,所以我想限制返回計
,如果沒有額外的要求,這是很容易!
MATCH (s:Entity)-[]-(dest) WHERE s._id = 'xxx'
RETURN dest
LIMIT 100
附加要求:返回兒童兒童的所有兒童的ID!
MATCH (s:Entity)-[]-(dest) WHERE s._id = 'xxx'
WITH collect(dest) as childrenSource
LIMIT 100
MATCH (childrenSource)-[]-(childDestination)
RETURN childrenSource as expandNode, collect(childDestination) as childrenIds
LIMIT 100
問題2:的限制是在錯誤的地方,因爲限制之前收集已經做了收集。
可能的解決辦法:
MATCH (s:Entity)-[]-(dest) WHERE s._id = 'xxx'
WITH collect(dest)[..100] as childrenSource
LIMIT 100
MATCH (childrenSource)-[]-(childDestination)
RETURN childrenSource as expandNode, collect(childDestination)[..100] as childrenIds
但我不認爲這是一個高性能的解決方案。因爲它需要相當多的時間
確切的問題說明:如果我有1000名兒童1個節點和每個孩子都有另一個1000孩子們,我想執行一個查詢返回的100名兒童,100子ID
-------------------------------------------------
| node 1 | child id 1_1,.... child id 1_100 |
| node 2 | child id 2_1,.... child id 2_100 |
| ... | ... |
| node 100 | child id 100_1,.. child id 100_100 |
-------------------------------------------------
其他解決方案:我做了一個簡單的擴展節點。並且比我在每個子節點上調用擴展。但是,做101個查詢而不是1個查詢聽起來不算太高性能。
這將是一個很好的可能性。但我認爲這個lib與最新的neo4j版本不兼容? 我正在使用Neo4j 3.1.1 CE 我試過了: - apoc 3.0.8.4:服務器沒有再啓動 - apoc 3.1.0.3&3.1.0.2:這隻增加了一個新函數:apoc.schema.assert – mabr
其他在這裏提到了一些事情。你在Windows上嗎? – InverseFalcon
是的,我在windows上使用neo4j(社區版) – mabr