Python 应用程序引擎NDB评论模型的一些好例子是什么?
我正试图在appengine中为我的博客建模一个基本的线性评论系统(你可以在上看到)。我的主要对象类是: 用户, 文章,, 评论 一个用户将有许多评论,应该能够查看他们的评论一目了然 一篇文章会有很多评论,应该一目了然 一条评论将与一个用户和一篇文章关联 我知道如何在一个标准的关系数据库中构建它——比如说,我可能有用于注释、用户和文章的单独表,用外键将它们连接在一起,对文章和用户的唯一性约束,对注释的唯一性约束,等等。没什么了不起的 使用NDB在Python应用程序引擎中对此进行建模的最佳方法是什么?与StructuredProperty一样,ndb.KeyProperty似乎也很有趣。但我不认为我可以使用StructuredProperty,因为评论可以“属于”用户和文章。但是对于ndb.KeyProperty,keyperty似乎不做任何检查或验证逻辑,所以我必须自己实现 我可以做的另一件事就是认输,在用户和文章中存储巨大的JSON blob,表示键和各种注释。这也许是一个不错的解决方案 有什么想法吗 编辑:Python 应用程序引擎NDB评论模型的一些好例子是什么?,python,google-app-engine,nosql,Python,Google App Engine,Nosql,我正试图在appengine中为我的博客建模一个基本的线性评论系统(你可以在上看到)。我的主要对象类是: 用户, 文章,, 评论 一个用户将有许多评论,应该能够查看他们的评论一目了然 一篇文章会有很多评论,应该一目了然 一条评论将与一个用户和一篇文章关联 我知道如何在一个标准的关系数据库中构建它——比如说,我可能有用于注释、用户和文章的单独表,用外键将它们连接在一起,对文章和用户的唯一性约束,对注释的唯一性约束,等等。没什么了不起的 使用NDB在Python应用程序引擎中对此进行建模的最佳方法是
这将是高读低写。我可能会在评论上增加一些参与(赞成票/反对票),但即使如此,它也会对阅读有很大的影响 高读低写场景是GAE的特色,因此这对于您的目的来说是一件好事 我会利用GAE模型的优势,因为它确保您在实体组中进行事务/原子操作。我想你不需要太多,但还是有它是件好事 正确的结构取决于您处理/使用数据的方式。我假设您的博客中的典型案例是显示文章的评论,因此,我将使您的评论模型成为文章模型的子模型-然后您可以查询某个(文章)祖先的评论,这将极大地扩展
我会在评论中为作者添加一个KeyProperty,因为它主要用于从我假设的密钥中获取用户。如果要扩展KeyProperty功能,可以这样做。下面是一个关于如何在db中使用的示例。(第1点)我建议您仔细考虑您计划提供哪些功能,因为以某种方式构建模型可能很难在将来进行某些更改 我会这样做: 首先,假设某种最终的一致性。无论您如何设计,在某些查询中最终都会有一些一致性 在文章中创建一个KeyProperty“owner”来存储用户密钥。如果您希望在查询单个用户的文章时实现强一致性,那么不使用“owner”KeyProperty,只需将用户_key设置为文章的父项即可(这将为用户及其文章创建一个实体组,在这里很好) 有了评论,你可以做更多的事情
更多的方法是可能的,但我喜欢这两种。谢谢!因此,使用祖先功能对于文章->评论是有意义的,但是每次用户想要查看他们的所有评论时,我是否还需要进行N次额外的阅读查询?此外,如果我理解正确,一篇文章的评论不需要“N”次阅读吗?我目前尝试的解决方案是一种非规范化——每篇文章都有一个StructuredProperty注释列表,用户也有相同的StructuredProperty注释列表(实际注释,无引用)。我正在使用跨组事务以正确的方式进行更新。这里的权衡似乎是太多的并发写作会引起一些轰动,但我暂时同意。。。