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)
上一篇:ArcGIS Pro开发Web3D应用(5)——许可过期或硬盘空间满了导致DataStore托管数据库验证失败


下一篇:数据结构与算法之用队列模拟方块舞