gpt4 book ai didi

java - Objectify 中的多对多关系具有强一致性

转载 作者:行者123 更新时间:2023-12-01 18:26:36 24 4
gpt4 key购买 nike

作为 Google Cloud Datastore 的新手,我想确保自己走在正确的道路上。

我需要什么:

  • 多对多关系
  • 关系本身必须保存描述关系的数据
  • 两种方式都需要强一致性:
    • 从用户实体到该用户有权访问的所有数据实体
    • 从数据实体到所有有权访问该实体的用户

这是我想到的:

@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 来检索数据实体)。

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

最佳答案

这个问题本身存在一个重要的概念性误解:关系并不牢固或最终一致。查询是。

如果执行 get-by-key 操作,结果将是强一致的。如果执行非祖先过滤查询,结果将最终一致。改写一下:

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

如果您需要强一致性,请构造数据,以便您的查询可以通过按键获取操作或祖先查询来满足。

关于java - Objectify 中的多对多关系具有强一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25916667/

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