鑑於以下做作數據庫:在Neo4j中,能找到其關係是另一個節點關係超集的所有節點嗎?
CREATE (a:Content {id:'A'}),
(b:Content {id:'B'}),
(c:Content {id:'C'}),
(d:Content {id:'D'}),
(ab:Container {id:'AB'}),
(ab2:Container {id:'AB2'}),
(abc:Container {id:'ABC'}),
(abcd:Container {id:'ABCD'}),
((ab)-[:CONTAINS]->(a)),
((ab)-[:CONTAINS]->(b)),
((ab2)-[:CONTAINS]->(a)),
((ab2)-[:CONTAINS]->(b)),
((abc)-[:CONTAINS]->(a)),
((abc)-[:CONTAINS]->(b)),
((abc)-[:CONTAINS]->(c)),
((abcd)-[:CONTAINS]->(a)),
((abcd)-[:CONTAINS]->(b)),
((abcd)-[:CONTAINS]->(c)),
((abcd)-[:CONTAINS]->(d))
有沒有能檢測所有Container
節點對的查詢,其中一個CONTAINS
任何的超集或相同Content
節點作爲其他Container
節點?
就我的示例數據庫,我想查詢返回:
(ABCD) is a superset of (ABC), (AB), and (AB2)
(ABC) is a superset of (AB), and (AB2)
(AB) and (AB2) contain the same nodes
如果暗號是不適合這個,但另一種查詢語言非常適合於它,或者如果Neo4j的是不適合這個,但另一個數據庫非常適合它,我也很欣賞這方面的投入。
回答查詢性能(爲2017-02-28T21:56Z)
我沒有足夠的經驗然而,隨着Neo4j的或圖形數據庫的查詢,分析答案的性能,和我還沒有構建我的大數據集來進行更有意義的比較,但我想我會使用PROFILE命令運行每個數據集並列出數據庫命中成本。我省略了時間數據,因爲我無法使這樣一個小數據集保持一致或有意義。
- stdob--:129總分貝擊中
- 戴夫貝內特:46總分貝擊中
- InverseFalcon:27總分貝擊中
兩個戴夫貝內特和stdob - 的答案似乎給了我,我要求的結果,謝謝。我已經提出了兩項提案,並且一旦我在更大的數據集上嘗試過它們,就會給予答案,因爲我不得不選擇一個答案。 – Gregyski
關於大型數據集中有多少個Container節點? – InverseFalcon
我還沒有組裝它(這需要做一些工作,現在我的議程上已經開始,我知道我有可行的工具來完成後面的計算)。然而,70,000容器似乎是一個現實的估計。每個容器的內容範圍從幾個到幾百個不等,但平均大概是30個。 – Gregyski