lam*_*rap 1 google-app-engine google-cloud-datastore
我有这样的数据库结构 -
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')
Run Code Online (Sandbox Code Playgroud)
我有一个查询,我试图用标签检索所有电影.我有这样的查询.
query = Movie.all()
movies = [{"name":movie.name,
"tags":[t.tag.name for t in movie.tags]} for movie in query]
Run Code Online (Sandbox Code Playgroud)
然而,这需要很长时间,特别是大量的电影(约400).我该如何优化?我尝试了内存缓存,但第一次调用仍然很慢,导致30秒响应超时.
您应该为您的实体建模如下:
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())
Run Code Online (Sandbox Code Playgroud)
在此方案中,您可以调用Tag.movies来获取属于某个标签的所有电影.
更多信息在GAE:建模实体关系
归档时间: |
|
查看次数: |
468 次 |
最近记录: |