Graph Gremlin:GroupBy顶点,具有count>;1.

Graph Gremlin:GroupBy顶点,具有count>;1.,graph,graph-databases,titan,gremlin,Graph,Graph Databases,Titan,Gremlin,我正在使用TITAN 0.4和gremlin进行遍历。 我的要求是识别图中重复的顶点,并合并这些顶点。 图中有>15m个顶点 gremlin> g.V.has('domain').groupBy{it.domain}{it.id}.cap ==>{google.com=[4], yahoo.com=[16, 24, 20]} 我可以对顶点进行分组,但我只需要那些存在多次的域(顶点) 在上面的例子中,我只需要返回=>{yahoo.com=[16,24,20]} 键“域”是索引的,如

我正在使用TITAN 0.4和gremlin进行遍历。 我的要求是识别图中重复的顶点,并合并这些顶点。 图中有>15m个顶点

gremlin> g.V.has('domain').groupBy{it.domain}{it.id}.cap

==>{google.com=[4], yahoo.com=[16, 24, 20]}
我可以对顶点进行分组,但我只需要那些存在多次的域(顶点)

在上面的例子中,我只需要返回
=>{yahoo.com=[16,24,20]}
键“域”是索引的,如果这有什么区别的话


请在此帮助我

考虑使用
groupCount
而不是
groupBy
来保存在收集的列表中计算ID的步骤:

g.V.has('domain').groupCount(it.domain}.cap.next().findAll{it.value>1}

我想这在更大的遍历上也更便宜,因为您只是维护一个计数器而不是标识符列表。

老问题,但您是否尝试在下面强制索引


g.V.hasNot('domain',null).groupBy{it.domain}{it.id}.cap

此解决方案在我的开发环境中运行良好,但在生产环境中,我有10个以上的顶点,在这些顶点中无法运行,抛出以下异常:-gremlin>g.V.has('ip_address').groupCount{it.ip_address}.cap next().findAll{it.value>1}WARN com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx-查询需要迭代所有顶点[(ip_地址null)]。为了获得更好的性能,请使用并非例外的索引-只是一个警告,提示您正在迭代所有顶点。我怀疑您的异常是
OutOfMemoryException
可能?无论哪种方式,这都是您的查询的本质-它必须迭代所有顶点,以找到它们上
groupCount
的“domain”属性。如果您必须这样做,并且您的图形很大,那么(1)在问题上投入更多内存,或者(2)使用titan hadoop,或者(3)以某种方式重新构造您的图形,以允许使用索引。是的,我正在从内存异常中退出分组步骤失败,因为临时存储异常gremlin>g.V.has('domain')。groupCount{it.domain}.cap.next().findAll{it.value>1}WARN com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx-查询需要迭代所有顶点[(域null)]。为了获得更好的性能,请使用由以下原因引起的索引:com.thinkaurelius.titan.diskstorage.TemporaryStorageException:storage backend中的临时故障我还在Key“domain”g.makeKey(“domain”).dataType(String.class).Index(“standard”,Vertex.class).make()中使用titan标准索引;您可能已经在“域”上创建了索引,但您的查询没有使用它。您的查询只是查找具有“域”键的任何顶点,该键需要扫描所有顶点。像
g.V.has('domain','google.com')
这样的查询将使用该索引,因为它正在该索引中查找特定的“domain”。你问题的解决方案仍然是我提到的三个选项之一。