0

我有以下 2 个实体。

class Photo(db.Model):
    name=db.StringProperty()
    registerdate=db.DateTimeProperty()
    iso=db.StringProperty()
    exposure=db.StringProperty()

class PhotoRatings(db.Model):
    ratings=db.IntegerProperty()

我需要执行以下操作。获取所有 iso=800 的照片 (Photo),按评级 (PhotoRatings) 排序。我无法在 Photo 中添加评分,因为评分一直在变化,而且我每次都必须编写整个 Photo 实体。这将花费我更多的时间和金钱,并且应用程序的性能会受到影响。我读了这篇文章, https://developers.google.com/appengine/articles/modeling 但无法从中获得太多信息。

编辑:我想避免获取太多项目并手动执行匹配。我需要快速有效的解决方案。

4

2 回答 2

1

您正在尝试使用显式非关系数据存储进行关系数据库查询。

正如您可能想象的那样,这会带来问题。如果您希望数据存储区为您对结果进行排序,它必须能够对您想要排序的内容进行索引。索引不能跨越多个实体类型,因此您不能拥有按Photos 排序的 s索引PhotoRatings

对不起。


但是,请考虑一下-哪种情况会更频繁地发生?查询此照片排序,或有人评价照片?很有可能,您的视图远多于操作,因此将评级存储为Photo实体的一部分可能不会像您担心的那么大。

于 2013-01-07T06:40:41.443 回答
1

如果您查看计费文档,您会注意到根据更改的属性数量对实体写入收费。

因此,您尝试做的事情不会降低写入成本,但肯定会增加读取成本,因为您将读取两倍数量的实体。

于 2013-01-07T07:06:54.950 回答