【问题标题】:Number of nodes/edges in a large graph via Gremlin?通过 Gremlin 在大图中的节点/边数?
【发布时间】:2013-06-17 09:18:19
【问题描述】:

通过 Gremlin 计算大型图中节点/边数的最简单和最有效的方法是什么?我发现最好的是使用 V 迭代器:

gremlin> g.V.gather{it.size()}

但是,根据documentation for V,这对于大图来说不是一个可行的选择:

图的顶点迭代器。利用它来遍历所有 图中的顶点。除非使用,否则在大图上小心使用 结合键索引查找。

【问题讨论】:

    标签: gremlin


    【解决方案1】:

    我认为计算所有顶点的首选方法是:

    gremlin> g = TinkerGraphFactory.createTinkerGraph()
    ==>tinkergraph[vertices:6 edges:6]
    gremlin> g.V.count()
    ==>6
    gremlin> g.E.count()
    ==>6
    

    不过,我认为无论您做什么,g.V/E 在一个非常大的图表上都会崩溃。在非常大的图表上,进行计数的最佳选择是使用像 Faunus(http://thinkaurelius.github.io/faunus/) 这样的工具,这样您就可以利用 Hadoop 的强大功能并行进行计数。

    更新:上面的原始答案是针对 TinkerPop 2.x。对于 TinkerPop 3.x,答案基本相同,意味着使用 Gremlin Spark 或某些提供程序特定的工具(如用于 DataStax Graph 的 DSE GraphFrames),这些工具经过优化以执行此类大规模遍历。

    【讨论】:

    • 太好了,谢谢!我在想元数据可能会在某处被跟踪和访问,但 Faunus 听起来确实是一个可靠的选择。
    • 我不知道是否有任何图表明确地将其作为元数据进行跟踪,但如果有的话,它将特定于图表本身的操作。 Blueprints/Gremlin 中没有任何内容可以直接计算该数量,Blueprints 也不会以任何方式公开元数据。如果你发现一个图实现确实有元数据来获取这些信息,你可能会通过使用getRawGraph() 获取底层图来访问它。
    • 是否可以在单个查询中同时运行 g.V.count() 和 g.E.count() 并使用两者的结果?
    • 是的,可以做到,但请注意,此答案中提到的相同警告仍然适用 - 只会加倍(或更多),因为现在您不仅要读取每个顶点,还要读取每个边在图中。无论如何,正确的答案需要的不仅仅是在 stackoverflow 注释中应该写的内容。它应该有自己的问题和答案 - 如果您创建一个并在此处链接,我很乐意回答。
    猜你喜欢
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 2014-05-18
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    相关资源
    最近更新 更多