Google app engine 应用程序引擎数据存储-数据模型
我从几天前就开始使用appengine了。现在对我来说最重要的是数据建模,所以我对此有一些疑问。 假设我有一个简单的Google app engine 应用程序引擎数据存储-数据模型,google-app-engine,google-cloud-datastore,Google App Engine,Google Cloud Datastore,我从几天前就开始使用appengine了。现在对我来说最重要的是数据建模,所以我对此有一些疑问。 假设我有一个简单的MyUser类。我还有一个Buddy类,看起来是这样的: @Entity public class Buddy { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Key id; private Date createAt; private MyUser user; privat
MyUser
类。我还有一个Buddy
类,看起来是这样的:
@Entity
public class Buddy {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key id;
private Date createAt;
private MyUser user;
private Key buddyOf;
}
在这个类中,我有MyUser
字段,因为每个好友都是一个用户,我有buddyOf字段,因为有另一个MyUser的好友列表中有这个好友。
问题是,如果我从数据存储中得到一个示例buddy,我也会得到这个MyUser
?如果是,在MyUser
类中将嵌入另一个实体
,并在该实体
中再嵌入一个,等等。。。?也许我应该只将键
字段保存到其他实体?
主要问题是我应该如何在数据存储中存储数据?我应该使用合成并在其他对象中包含对象?如果是,那么对象中的对象在对象中的对象等。。。
最好的方法是什么?数据存储对象模型设计应该不同于通常用于关系数据库的设计。您应该检查受支持类型的属性。没有对象作为属性类型。您仍然可以使用嵌入式注释,但对于您的案例来说,这不是最好的方法
您应该为用户存储密钥甚至ID作为引用。它将使实例变小,并解决您描述的问题。但您将无法实现引用完整性。这是NoSQL设计的一个限制。我认为您正在建模一个n:m关系。您可以创建如下结构:
- 对于每个MyUser实体,它都有一组元素类型为Buddy的实体(该组表示此MyUser实体的所有伙伴)
- 每个好友实体都有MyUser实体作为其祖先李>
- 每个好友实体通过包含一个字段来表示所有者MyUser和另一个MyUser对象之间的关系:另一个MyUser的id
- 向MyUser实体添加/删除好友(只需添加/删除新的子好友实体)
- 查询MyUser实体的所有好友(列出所有子项)