使用嵌入类或存储外部密钥用于Google数据存储区?

时间:2014-03-06 06:40:13

标签: java google-app-engine google-cloud-datastore jdo

这是有关Google数据存储区的最佳实践问题。我正在尝试建立对象关系,我看到了两个选项

  1. 在父类中直接嵌入带有@Persistent的子类
  2. 使用Google Key类并将我自己的外键存储为相关类中的字符串
  3. 第三个选项不可用,JDO加入

      

    App Engine不支持连接查询:您无法使用子实体的属性查询父实体。 (您可以查询嵌入类的属性,因为嵌入式类存储父实体的属性。请参阅定义数据类:嵌入式类。)

    我担心使用选项1是一个简单的搜索查询,我将返回许多不需要的数据。

    作为Product Class和ProductDetail类的示例。当客户搜索我的产品时,他们只是根据类别,名称进行搜索并按价格排序。所有简单信息都在Product类中。在ProductDetail类中,我包含大型描述字符串,图像链接,关键属性列表。因此,在Product Class中,我可以嵌入ProductDetail类,或者只创建一个包含ProductDetail类的键值的外键属性。

    那么我应该使用选项2吗?我在某个地方读到了不像对待数据库那样对待Google数据存储区。但是使用选项2就是我正在做的事情。

1 个答案:

答案 0 :(得分:0)

同意选项1不可扩展,因为请求者通常对嵌入的子项不感兴趣。 JDO和JPA旨在按需执行延迟加载数据,但是当不需要嵌入数据时,可能仍会有开销。

选项2可能看起来像是严格关系的,但并非必须如此。如果您的实体未通过祖先密钥锁定到实体组中,则记录不相关且没有约束。实际上,您可以确定实体设计和应用程序代码的一致性。