【问题标题】:Need to refine gremlin query需要细化 gremlin 查询
【发布时间】:2014-09-15 10:14:14
【问题描述】:

我是 Gremlin 的新手。看到Answer from stephen mallette,这是来自相同答案的代码

g.v('u1','u2').out('like').groupCount().cap.next().sort{-it.value}

如何改进此查询以根据喜欢对具有type=Camera 的产品进行排序。考虑每页 10 条记录的分页。显示大量产品的排序结果会是一种有效的解决方案吗?

【问题讨论】:

    标签: gremlin titan


    【解决方案1】:

    你真的只需要应用一个过滤器来获得你想要的产品类型:

    g.v('u1','u2').out('like').has('type','camera').groupCount().cap.next().sort{-it.value}
    

    以这种方式进行排序/分页可能有效也可能无效。我想这取决于你处理多少喜欢。数千可能没什么大不了的,但数十万可能比你能忍受的要少。

    当您使用 Titan 时,您有比大多数图表更多的选项来解决这个问题(如果它确实是一个问题 - 我建议您生成测试数据并编写一些查询来确定)。您可能要做的一件事是将“类型”属性非规范化为“喜欢”边缘,以便您可以在outE 上应用您的“类型”过滤器,而不是强制遍历out,如上所示(强制遍历意味着Titan 需要找到边缘另一端的顶点,这增加了 Titan 需要检索的数据量)。您可以阅读更多关于这些选项的信息here

    【讨论】:

    • 你是说我应该使用边缘“like”而不是“type”属性
    • 好吧,我以为你在“产品”顶点上有“类型”。如果你像我建议的那样将type 非规范化到likes 边缘,那么你会做更多类似的事情:g.v('u1','u2').outE('like').has('type','camera').inV.groupCount().cap.next().sort{-it.value}
    • 我会试试这个。在 Titan 中,我通过 java 使用,我发现它的查询与 gramlin 相比有点复杂。例如 pipe.start(v).inE("inEdge").has("inEdgeProperty", "XXXXX").outV().has('vertexProps''xyz')` 在 Titan 中首先使用 java v.query().direction(Direction.IN).labels("inEdge").has("inEdgeProperty", "XXXXX").vertices().iterator() 然后迭代它为has('vertexProps''xyz') 分开
    • Gremlin 比较低级别的 Titan/Blueprints API 更具表现力,因此一般来说,Gremlin 会导致代码更少、代码更易读并且随着时间的推移具有更好的可维护性。
    • 我们可以使用 java 的 gremlin 和使用 GremlinPipeline 的 titan。是否符合泰坦标准
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 2016-02-02
    • 2014-03-05
    相关资源
    最近更新 更多