【问题标题】:Get map of vertex labels with all properties with Gremlin - Tinkerpop3使用 Gremlin 获取具有所有属性的顶点标签图 - Tinkerpop3
【发布时间】:2018-02-22 21:26:13
【问题描述】:

我正在尝试返回类似的东西

{
  "label1" : ["prop1","prop2"],
  "label2" : ["prop3","prop4"],
  "label2" : ["prop1","prop3"]
}

其中labels[N]是顶点标签值,props数组是这些顶点的属性。

我可以获得标签列表和属性列表,但我无法将它们组合到单个对象中。我可能会执行这两个查询并最终组合这两个数组,但是类似于

g.V().valueMap().select(keys).dedup();

只获取有属性的地方,所以如果一个顶点类型没有任何属性,那么这个返回的数组的大小与做的不同

g.V().label().dedup();

这是使用 gremlin 语法 (TP3) 谢谢

【问题讨论】:

    标签: gremlin tinkerpop3


    【解决方案1】:

    我假设您正在尝试获取某种架构定义。请注意,这将是一个相当昂贵的遍历,因为您必须迭代所有顶点才能执行此操作:

    gremlin> g.V().
    ......1>   group().
    ......2>     by(label).
    ......3>     by(properties().
    ......4>        label().
    ......5>        dedup().
    ......6>        fold())
    ==>[software:[name,lang],person:[name,age]]
    

    【讨论】:

    • 非常感谢。是的,确实看起来相当昂贵,但只会在我启动 API 并在之后缓存它时运行一次。我可以对索引进行任何建议的优化吗?
    • 在这种情况下,索引无济于事。无论您做什么,都无法在不迭代整个图形的情况下收集整个架构,因此您会陷入困境。我认为这种遍历可以在 OLAP 中工作,因此如果您的图表很大,您可以通过 spark 执行它。你没有说你使用什么图数据库,但你可以检查它的 API 是否能够更直接地访问模式的元素,这样你就不必遍历整个图来获取它。
    • 我正在使用 Janusgraph 和 HBase 存储后端 lucene 索引(用于 PoC)。我很可能在生产中将后者换成 Solr。谢谢
    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多