Appengine数据存储区父级或索引

时间:2012-06-14 14:12:04

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

我正在设计我的应用程序数据模型,我怀疑是使用父索引还是简单索引。

Site{
  @Id Long id;
}

Booking{
  @Id Long id;
  @Index/Parent Key<Site> site;
  @Index Date date;
}

我的2个实体是预订网站。关系是网站有许多预订。 我想以两种方式检索预订: getBookingBySiteAndDate (关键网站,日期日期)和 getBookingsByDate (日期日期)

如果我使用,则第二次查询*效率不高,因为我需要预订的网站来检索所有预订。本网站可能已被删除。

如果我使用索引,则第一个查询效率不高,因为我需要(日期,网站)中的自定义索引并且成本很高。因为预订没有实体组而且我有1w / s的限制,因此创作的公寓不一致。

你有什么建议?

2 个答案:

答案 0 :(得分:1)

我不会使用父母。我见过父母的唯一价值就是你需要创建一个交易组。在您的示例中,我只是将Site的id存储在预订表中,并为getBookingBySiteAndDate查询创建索引。它会非常快。索引将自动为您创建,无需您做额外的工作。

答案 1 :(得分:0)

我已经在Objectify邮件列表中进行了双重检查,并且没有限制将getBookingsByDate与Parent和没有Site Id一起使用。

他们建议我使用的解决方案是使用@Parent,因为它更快,而且你不需要Site-Date上的双索引。