Python 谷歌应用引擎,查询多个实体

Python 谷歌应用引擎,查询多个实体,python,google-app-engine,Python,Google App Engine,我有以下两个实体 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的所有照片

我有以下两个实体

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
s创建按
PhotoRatings
排序的索引

对不起


但是,考虑一下——哪一种情况会更常见?查询此照片排序,或某人对照片进行评级?很可能,您的视图比操作多得多,因此将评级存储为
照片
实体的一部分可能不会像您担心的那么大。

如果查看,您会注意到实体写入是按更改的属性数收费的


因此,您尝试执行的操作不会降低写入成本,但肯定会增加读取成本,因为您将读取双倍的实体数。

谢谢!所以这是一个限制,没有办法绕过它。我想我将不得不使用它。哦,对了,我的印象是,无论更改多少,每次写入都将对整个实体收费。这似乎是太多的努力,以优化这没有好的结果。谢谢你指出这一点。不,我将只测试性能将受到多大的影响,因为我的实体已经相当大了。
class Photo(db.Model):
    name=db.StringProperty()
    registerdate=db.DateTimeProperty()
    iso=db.StringProperty()
    exposure=db.StringProperty()

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