gpt4 book ai didi

python - App Engine 数据存储区了解 noSql

转载 作者:行者123 更新时间:2023-12-01 05:47:45 25 4
gpt4 key购买 nike

我有这 2 个数据存储:

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

你们会如何改进这个?我在这种方法中最讨厌的事情是必须浏览每一篇文章,这将导致一旦系统变得更大,系统就会变得非常慢。

另请注意,所有帖子都存储在内存缓存中,因此我无法使用 GQL 来改善这一点。除非您对在内存缓存中存储内容有更好的想法,而不是我的方法...也就是说,将所有常用查询放入其中,并在将新项目添加到数据存储区后更新缓存。

对于那些可能关注我的问题的人来说,这个项目是社交媒体的一个新概念,一旦完成就会发布一个链接:)

最佳答案

您不必每次都从数据库中获取所有帖子;使用过滤器查询来获取与特定用户 ID 匹配的所有帖子:

q = db.Query(Post)
q.filter('receiver =', uId)

如果您目前无法执行此操作,因为您将每一篇文章存储在一个内存缓存键下,也许您应该调整您的方法 - 它可能无法很好地扩展。使用上述查询,您可以利用 GAE 数据存储区的索引和查询功能,这始终优于直接迭代应用程序中的整个实体集。

我建议您在从数据存储区生成用户页面后,将其存储在内存缓存中。

此外,在 Post 上,您可以对 submitterreceiver 使用 db.ReferenceProperty:

class Post(db.Model):
post = db.StringProperty(required = True, multiline = True)
submitter = db.ReferenceProperty(reference_class=User, required = True)
receiver = db.ReferenceProperty(reference_class=User, required = True)
created = db.DateTimeProperty(auto_now_add = True)

https://developers.google.com/appengine/docs/python/datastore/typesandpropertyclasses#ReferenceProperty

关于python - App Engine 数据存储区了解 noSql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15533121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com