python-GAE数据存储区缓存键与过滤器
作者:互联网
假设您有一个这样的实体.
postid=db.StringProperty()
comment=db.StringProperty()
用于在帖子ID标识的某个帖子上存储评论.
这些评论可以记录数十亿条记录.现在,如果你想
获取您可以做的所有与某个帖子相关的评论,
query=Comment.all()
query.filter('postid = ','id').
或者,您可以定义以下内容,而不是这样做:
class Post(db.Model)
commentids=db.StringListProperty()#store list of comment ids
这样,您可以直接通过以下方式获得评论
comment=Comment.get_by_key_name('commentkey')
从长远来看(当评论达到数百万甚至数十亿马克时),
更有效率.换句话说,哪个更合适.
解决方法:
如果您打算有数十亿条评论,请考虑也使用最新的NDB API,它除其他功能外还支持自动缓存.
而不是按postid过滤它们,您可能应该对Comment实体使用父级.这是一个示例(使用DB,但是使用NDB非常相似):
如果您有这样的模型:
class Post(db.Model):
desc = db.StringProperty()
class Comment(db.Model):
desc = db.TextProperty()
您可以创建帖子和评论,例如:
post_db = Post(desc='Hello World')
post_db.put()
comment_db = Comment(parent=post_db, desc='Nice post')
comment_db.put()
最后,如果您想从特定的post_db实体获取所有注释,请执行以下操作:
comment_dbs = Comment.all().ancestor(post_db)
标签:datastore,google-app-engine,python 来源: https://codeday.me/bug/20191127/2076026.html