我有这两个数据存储:
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 中,而不是我的方法……也就是说,将所有经常使用的查询放入其中,并在向数据存储添加新项目后更新缓存。
对于那些可能关注我的问题的人来说,这个项目是社交媒体的一个新概念,一旦完成就会发布一个链接:)