我有这样的数据库结构 -
class Movie(db.Model):
name = db.StringProperty()
class Tag(db.Model):
name = db.StringProperty()
class MovieTag(db.Model):
movie = db.ReferenceProperty(Movie, collection_name='tags')
tag = db.ReferenceProperty(Tag, collection_name='movies')
我有一个查询,我试图用标签检索所有电影。我有这样的查询。
query = Movie.all()
movies = [{"name":movie.name,
"tags":[t.tag.name for t in movie.tags]} for movie in query]
然而,这需要很长时间才能拍摄大量电影(约400张)。我该如何优化?我尝试了内存缓存,但第一次调用仍然很慢,导致30秒响应超时。
答案 0 :(得分:5)
您应该为您的实体建模如下:
class Movie(db.Model):
name = db.StringProperty()
tags = db.ListProperty(db.Key)
class Tag(db.Model):
name = db.CategoryProperty()
@property
def movies(self):
return Movie.gql("WHERE tags = :1", self.key())
在此方案中,您可以调用Tag.movies来获取属于某个标签的所有电影。
的更多信息