【发布时间】:2021-09-27 22:02:59
【问题描述】:
我试图弄清楚如何在我们的图表中找到异常值。特别是具有多于 N 条边的节点,其中 N 可能是某个较大的数字。我们的图有超过 20 亿个节点。有没有有效的方法来做到这一点?
【问题讨论】:
我试图弄清楚如何在我们的图表中找到异常值。特别是具有多于 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 列表。将查询分布在多个只读副本中也会加快速度。
【讨论】: