假设我有一个包含博客文章和评论的博客应用程序。让我们说,为了论证,可能会有大量的评论,足够大,简单的comments = StringProperty(repeated=True
)是不够的。
我应该将注释存储为JSONProperty(从python列表序列化):
class BlogPost(ndb.Model):
title = ndb.StringProperty()
description = ndb.TextProperty()
comments = ndb.JSONProperty()
或者我应该创建一个单独的Comment模型并将相应的blogpost的ID存储为属性:
class Comment(ndb.Model):
text = ndb.TextProperty()
blog_id = ndb.IntegerProperty()
created = ndb.DateTimeProperty(auto_now_add=True)
我可以查询特定博客帖子的所有评论,如下所示:query = Comment.query(Comment.blog_id==blog_id).order(-Comment.created)
?
一种方法更可取吗?特别是如果评论可能变得非常大> 1000.
答案 0 :(得分:1)
你肯定想要一个单独的评论模型。
一个原因是实体的大小限制为1MB。如果一个帖子收到大量评论,那么你就有超出限制的危险,你的代码就会崩溃。
另一个原因是您要考虑实体的读/写速率和可伸缩性。如果您使用JSON,则每次发表评论时都需要更新BlogPost实体。如果很多人同时写评论,那么您将需要交易并存在争用问题。如果您有一个单独的评论模型,那么您可以轻松扩展到每秒一百万条评论!