【发布时间】:2013-03-20 19:38:53
【问题描述】:
我有这两个数据存储:
class User(db.Model):
name = db.StringProperty(required = True)
password = db.StringProperty(required = True)
email = db.EmailProperty(required = True)
created = db.DateTimeProperty(auto_now_add = True)
image = db.LinkProperty(required = True)
class Post(db.Model):
post = db.StringProperty(required = True, multiline = True)
submitter = db.IntegerProperty(required = True)
receiver = db.IntegerProperty(required = True)
created = db.DateTimeProperty(auto_now_add = True)
但是问题是我生成了一个用户页面,其中显示了用户收到的所有帖子,但我以非常 SQL 和幼稚的方式执行此操作,如下所示:
ret = []
#Get all Posts
for p in self.getPosts():
#If the receiver of the post is equal to uId
if str(p.receiver) == str(uId):
#Get submitter Details
sDetails = self.getUserDetails(p.submitter)
#Check that details were received
if sDetails:
#Add needed Details to post
p.sName = sDetails.name
p.sId = str(sDetails.key().id())
p.sImage = sDetails.image
ret.append(p)
return ret
你们会如何改进呢?在这种方法中我最讨厌的事情是必须遍历每个帖子,这将导致系统变大后系统变得非常慢。
另外请注意,所有帖子都存储在 memcache 中,因此我无法使用 GQL 来改善这一点。除非您有更好的想法将内容存储在 memcache 中,而不是我的方法...也就是说,将所有常用查询放入其中,并在向数据存储添加新项目后更新缓存。
对于那些可能关注我的问题的人来说,这个项目是社交媒体的一个新概念,一旦完成就会发布一个链接:)
【问题讨论】:
标签: python google-app-engine google-cloud-datastore