gpt4 book ai didi

titan - 如何使用 Gremlin/Tinkerpop 在 IBM Graph (TitanDB) 中检索用户源并对其进行分页

转载 作者:行者123 更新时间:2023-12-02 11:08:54 25 4
gpt4 key购买 nike

我有一个在 IBM Graph(由 Cassandra 支持的 TitanDB)中建模的非常基本的新闻提要,如下所示:

enter image description here

我正在尝试编写一个执行以下操作的查询:

  1. 从顶点开始用户:John.Smith
  2. 获取用户 FRIENDS 的 15 个最新帖子以及他自己的帖子。
  3. 检查用户:John.Smith是否喜欢这些帖子,并以每个帖子的简单is_liked bool 属性的形式返回。

此查询有几个先决条件:

  • 在每个返回的帖子中,还应返回帖子 USER 的属性。对于这个问题,只需要 avatar 属性。
  • 我需要能够对这些结果进行分页。即,一旦我检索到前 15 个帖子,我就需要能够返回下 15 个帖子,然后返回下一个帖子,等等。

我可以毫无问题地找到用户的 friend 及其LATEST_POSTS:

g.V().hasLabel("USER").has("userid", "John.Smith").both("FRIEND").out("LATEST_POST");

我已阅读 Tinkerpop文档,但我发现自己仍然不知道如何开始构建此查询以满足我的要求。

此外,在性能、数据建模、模式或索引建议方面对此方法的任何评论都将非常有帮助。即我是否应该期望这种方法能够大规模实时检索提要?

提前致谢。

最佳答案

对于给定的图形模式,查询将如下所示:

g.V().has("user", "userid", "John.Smith").as("john").
union(identity(), both("FRIEND")).as("user").
out("LATEST_POST").
flatMap(emit().repeat(out("PREVIOUS_POST")).range(page * pageSize, (page + 1) * pageSize)).as("post").
choose(__.in("LIKED").where(eq("john")), constant(true), constant(false)).as("likedByJohn")
select("user", "post", "likedByJohn")

但 Alaa 已经指出这种方法无法扩展,以及如何改进图形架构。

关于titan - 如何使用 Gremlin/Tinkerpop 在 IBM Graph (TitanDB) 中检索用户源并对其进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40224621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com