我有一個Titan圖形數據庫,其頂點由一個名爲「property1」的屬性連接起來。使用Gremlin/TitanDB執行聚合查詢
是否可以查詢寫一個小鬼(或其他任何泰坦將支持),以:
Find all edges that have a value for "property1" that is seen 5 or less times.
在SQL我會使用「分組依據」,MongoDB中我會使用的聚合函數之一。
我在想這可能是Furnace/Faunus的工作?
我有一個Titan圖形數據庫,其頂點由一個名爲「property1」的屬性連接起來。使用Gremlin/TitanDB執行聚合查詢
是否可以查詢寫一個小鬼(或其他任何泰坦將支持),以:
Find all edges that have a value for "property1" that is seen 5 or less times.
在SQL我會使用「分組依據」,MongoDB中我會使用的聚合函數之一。
我在想這可能是Furnace/Faunus的工作?
您可以通過迭代所有邊緣並使用groupBy
來完成此操作。下面是與地方使用weight
的property1
玩具圖爲例:
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> g.E.groupBy{it.weight}{it}.cap.next()
==>0.5=[e[7][1-knows->2]]
==>1.0=[e[8][1-knows->4], e[10][4-created->5]]
==>0.4=[e[11][4-created->3], e[9][1-created->3]]
==>0.2=[e[12][6-created->3]]
所以這組由他們weight
所有邊緣。從那裏你可以下降到標準的常規功能,如findAll
來篩選出你不想要的東西(在這裏我篩選出具有>1
邊緣的權重......在你的情況下它將是<5
)。
gremlin> g.E.groupBy{it.weight}{it}.cap.next().findAll{k,v->v.size()>1}
==>1.0=[e[8][1-knows->4], e[10][4-created->5]]
==>0.4=[e[11][4-created->3], e[9][1-created->3]]
顯然,這是一個真正的大圖有點昂貴的操作中,你有很多重複的做了邊緣,你必須建立在內存中Map
這可能取決於多樣性是大的值在property1
。如果你可以找到方法來限制邊緣迭代與其他過濾器,這可能會有所幫助。
如果你有一個非常大的圖,這對Faunus來說是一個不錯的工作。我會在這裏簡單回答一下,並簡單地說,你不一定希望具有property1
值的特定邊緣出現少於5次,並且你只想知道不同property1
值出現的次數。通過Faunus,你可以得到如下發行版:
g.E.property1.groupCount()