2017-06-16 15 views
0

我是Neo4j的新手,試圖瞭解如何處理多維上的聚合。例如,我有一個人 - 當他得到任務時,他會將產品送到不同的城市。我將節點作爲人員,產品和城市,並在它們之間建立關係(交付產品和交付)。我的數據是像下面Neo4j - 如何處理多維上的聚合

P1 - [delivered Products A1, A2 ] - [to City C1] 
P1 - [delivered Products A1 ] - [to City C2] 
P1 - [delivered Products A1, A2] - [to City C2] 

我有聚合像下面保存在我的圖表dbP1 - 交付3次產品A1

P1 - delivered 2 times Product A2 
P1 - delivered 1 time to city C1 
P1 - delivered 2 times to city C2 

附圖爲上述連接。

Neo4j schema showing the above connections

現在我想看看P1怎樣的人很多次交付的產品A1到市C2
[P1-A1-C2]或P1怎樣的人很多次交付的產品A1到市C1 [P1-A1 -C1] 嘗試使用產品和城市維度查看數據。

我們是否有Graph db中的任何設計模式來處理多維度中的此類聚合,或者我們是否需要將以上組合存儲在圖形db中的聚合之前?

回答

0

我相信這裏的主要問題是你的模型。由於你有一個像(Person)-[:DELIVERED]->(:Product)-[:TO]->(:City)這樣的模型的圖表,因此無法知道哪些交付是針對特定的城市進行的。 (例如):Person:Product之間的關係[DELIVERED {times : 3}]無助於回答您要求提交給數據庫的問題。

一個很好的方法可以幫助您在模型中添加一個名爲:Delivery的新節點類型。您的圖形將通過這種方式看起來是這樣的:

(:Person)-[:MADE]->(:Delivery) 
(:Delivery)-[:TO]->(:City) 
(:Delivery)-[:PRODUCT]->(:Product) 

正如你可以看到一個節點:Delivery:Person:City:Product

相關的現在,我想看看人P1多少次交付產品A1到 城市C2 [P1-A1-C2]或人P1交付產品A1的次數爲 城市C1 [P1-A1-C1]嘗試使用產品和城市 尺寸查看數據。

我相信,這個查詢將回答基於該模型你的問題:

MATCH (:Person {id:'P1'})-[:MADE]->(d:Delivery)-[:PRODUCT]->(:Product {id:'A1'}), 
(d)-[:TO]->(:City {id:'C1'}) 
RETURN count(d) 
+0

感謝布魯諾。但是我試圖看到,如果我每天都有交付產品,我會將交易數據等完整信息再次存儲在圖形數據庫中。數據將呈指數增長。我試圖將我的Graph數據庫視爲聚合數據庫,我想每月查看一次,向城市C1交付多少產品A1等。在我的實時數據中,我將擁有多個維度來執行此交付。 –

+0

你好。我相信[此鏈接](http://iansrobinson.com/2014/05/13/time-based-versioned-graphs/)可以幫助你。 –

+0

感謝布魯諾..這是非常好的鏈接知道圖版本。這裏還有......數據不是以銷售ID級別存儲的,並且僅有一個維度「產品」銷售。 –