在 Gremlin 中查找异常值以查找具有多于 N 条边的节点?
Finding outliers in Gremlin to find nodes with more than N edges?
我正在尝试弄清楚如何在我们的图表中找到异常值。特别是具有多于 N 条边的节点,其中 N 可能是一些大数。我们的图表有超过 20 亿个节点。有没有有效的方法来做到这一点?
在这种规模下,您可能希望对查询进行多线程处理并将请求分批发送到服务器。客户端线程的一个很好的近似值是服务器上 vCPU 数量的 2 倍。如果您能够发送最有效的 ID 列表。否则,您将需要执行很多 range
个步骤。然后每个线程会做一些事情,比如查询下面的多组 ID 范围:
g.V(<list of IDs>).filter(out().count().is(gt(x)))
然后您将收集应用程序中的所有离群值。我认为您应该将其视为可能需要一段时间才能完成的批处理任务。
另一种方法是使用 Neptune Export 导出图形并将其加载到 Spark 中,然后 运行 使用 GraphFrames 之类的 degree
查询。
对于一个相当大的实例,我认为使用多线程的技术会奏效,特别是如果您能够轻松地生成您在每个查询中查找的顶点 ID 列表。跨多个只读副本传播查询也会加快速度。
我正在尝试弄清楚如何在我们的图表中找到异常值。特别是具有多于 N 条边的节点,其中 N 可能是一些大数。我们的图表有超过 20 亿个节点。有没有有效的方法来做到这一点?
在这种规模下,您可能希望对查询进行多线程处理并将请求分批发送到服务器。客户端线程的一个很好的近似值是服务器上 vCPU 数量的 2 倍。如果您能够发送最有效的 ID 列表。否则,您将需要执行很多 range
个步骤。然后每个线程会做一些事情,比如查询下面的多组 ID 范围:
g.V(<list of IDs>).filter(out().count().is(gt(x)))
然后您将收集应用程序中的所有离群值。我认为您应该将其视为可能需要一段时间才能完成的批处理任务。
另一种方法是使用 Neptune Export 导出图形并将其加载到 Spark 中,然后 运行 使用 GraphFrames 之类的 degree
查询。
对于一个相当大的实例,我认为使用多线程的技术会奏效,特别是如果您能够轻松地生成您在每个查询中查找的顶点 ID 列表。跨多个只读副本传播查询也会加快速度。