当前位置: 首页 > 知识库问答 >
问题:

Object tify中的多对多关系具有很强的一致性

南门飞
2023-03-14

作为谷歌云数据存储的新手,我希望确保自己走上了正确的轨道。

我需要什么:

  • 多对多关系

这是我想出的:

@Entity
public class User {
    @Id String userId;
}

@Entity
public class PermissionIndex {
    @Id long id;
    @Parent Key<User> user;
    List<Ref<Permission>> permissions;
}

@Entity
public class Permission {
    @Id long id;
    boolean writePermission;
    boolean managePermission;
    @Load Ref<Data> data; //So that Data entities can be retrieved with strong
                          //consistency after looking up Permission entities
                          //for a specific User entity
    @Load Ref<User> user; //So that User entities can be retrieved with strong
                          //consistency after looking up Permission entities
                          //for a specific Data entity
}

@Entity 
public class DataIndex {
    @Id long id;
    @Parent Key<Data> data;
    List<Ref<Permission>> permissions;
}

@Enti.
public class Data {
    @Id String dataId;
    @Id String actualData;
}

如果我对这个实现的理解正确,那么过滤特定用户的数据实体的唯一方法就是在内存中获取所有权限实体和过滤数据实体,对吗?

有没有更好的方法来实现它仍然满足要求?

更新时间:

在我的理解中,这个实现将允许我实现检索数据的逻辑,以确保强一致性(使用用户id-祖先查询来检索所有权限实体,然后使用get_by_key来检索数据实体)。

我想知道我是否应该以不同的方式处理它——因为我对数据存储/对象化没有太多经验。

共有2个答案

楚修为
2023-03-14

你的逻辑似乎很合理。。。但是对于关系数据库。

这种逻辑在作为数据存储的HRD中并不成立。很明显,有很多方法可以解决这个问题,你已经用你描述的方法解决了这些问题。

为了保持一致性,您唯一的机会就是使用祖先查询。数据存储最终是一致的,只有使用“get\u by\u key”或祖先查询才能“强制”一致性。

如果您想要更接近SQL的东西,可以考虑云GQL?

萧奇
2023-03-14

这个问题固有一个重要的概念误解:关系不是很牢固,也不是最终一致的。查询为。

如果执行按键获取操作,结果将非常一致。如果执行非祖先过滤器查询,结果最终将保持一致。换言之:

如果您使用按键操作导航对象图,您将看到很强的一致性。如果您使用非祖先查询过滤器导航对象图,您将看到最终的一致性

如果您需要强大的一致性,请对数据进行结构化,以便您的查询可以通过按键获取操作或祖先查询得到满足。

 类似资料:
  • 我正在努力理解如何处理与JOOQ的一对多和多对多关系的Pojo。 我存储玩家创建的位置(一对多关系)。一个位置可以容纳多个可能访问它的其他玩家(多对多)。数据库布局可归结为以下内容: 在我的java应用程序中,所有这些信息都存储在一个pojo中。请注意,玩家和受邀玩家列表可以从应用程序中更新,也需要在数据库中更新: 我可以使用JOOQ的pojo映射将这三个记录映射到单个pojo吗?我可以使用这个p

  • 问题内容: 有三个表:,并且,医院能提供的医疗服务和语言服务。因此,存在两个多对多关系。 简单ERD 现在,我想使用和搜索医院数据。 DaoImpl: 而且,如果我想从三个表中按邮政编码,医疗类型和语言进行搜索,那么如何编写一个jsql。 警告: 错误:org.hibernate.hql.internal.ast.ErrorCounter- 预期加入的路径!希望加入的路径!在org.hiberna

  • 我的Laravel项目有问题。我有范文和评论。一篇帖子有很多评论,这是我帖子评论中的关系。当我想获得所有帖子和评论时,一切都很好: 我有问题,因为我想写搜索引擎的模型。我只想得到帖子和评论,如果搜索条件为真的评论。我尝试以下代码: 但这段代码返回所有要发布的注释,而不仅仅是条件为true的注释。

  • 我有一个桌子实验和一个桌子标签。一个实验可能有许多标签。架构: 是否可以使用返回实验和相应标签列表的jooq创建查询? 类似

  • 我还想知道如何定义每个模型上的关系--你是否需要或者是否可以只在用户上定义关系?