Google App Engine ReferenceProperties与字符串列表

时间:2012-08-25 14:46:46

标签: google-app-engine

假设我有一个Club实体和一个User实体。 Club有一个成员列表。

现在说我想获得用户所属的所有Clubs。有两种方法可以做到这一点,每种方法都包含一个成员列表:

  1. 列表可以是字符串列表,这些字符串是成员的电子邮件地址。如果我想让用户参与俱乐部,我会做clubQuery.filter('emailAddresses =', userEmail)

  2. 列表可以是ReferenceProperties列表,其中每个项目都是对User实体的引用。所以我会做clubQuery.filter('userReferences =', user_key)

  3. 哪个是更好的选择,为什么?或者两者之间真的没有差异吗?

1 个答案:

答案 0 :(得分:0)

根据电子邮件的平均长度,您可以通过存储电子邮件来节省一些存储空间,它们的密钥可能会更长。或者不是。

当您按键获取数据存储区时,您可以获得强一致性读取,而不是从过滤器操作获得的最终一致结果。如果存储密钥,您可以选择在必要时执行此操作。

听起来你有第三种选择,就是用电子邮件地址作为关键;你将通过这种方式获得两全其美的效果。

编辑我想我并没有真正回答你的问题。这是一个更好的答案。

  • 选项1可以节省存储空间,从而节省一些成本。虽然它很小,也许微不足道。
  • 选项2可以更方便地在俱乐部端编写代码,因为您可以自动解除引用。
  • 如何查询用户所属的俱乐部,这并没有太大的区别。
  • 如果您使用我的建议将电子邮件作为密钥,它可以允许您以一致的方式获取用户实体,这是您没有要求的好处。