【发布时间】:2016-10-22 19:46:49
【问题描述】:
我们需要在 GAE 数据存储中实施。有一组文档(以百万计),每个文档都有一个所有者、一些 cmets 和与之相关的修订。
如果文档的所有者要离开组织,那么我们需要将文档的所有权更改为上次修订的人。我们还需要保留每个文档的修订和 cmets。这种所有权变更将由一个作业来实现,该作业将一个一个地处理每个文档。
在实体 Document、Comment 和 Revision 之间建立父子关系是否正确,例如 Document 是父级,Comment 和 Revision 作为其子级?或者以典型的 NoSql 方式,我们需要展平表格并制作单个实体?
典型的 NoSQL 实现只需要插入和读取,不需要更新。这是谷歌数据存储的工作方式吗?请澄清。
我们的研究表明我们可以建立关系,但这看起来更像是 RDBMS。
【问题讨论】:
-
这个问题太宽泛了。您应该尝试建模和原型制作。回来时会提出一些具体的实施问题。如果您将拥有可以更改的自有关系不要使用键中定义的父级来定义它。这意味着您无法更改所有权,但您必须复制并创建新实体。树和关系很好,重要的是查看您的访问模式并优化活动的实体。如果您的查询通常意味着连接,那么存储您需要的所有内容的中间实体就变得很重要。
-
我们可以看看你的文档格式,编辑成问题吗?就我个人而言,我认为 NoSQL 提倡的无模式格式导致的问题多于它解决的问题 - 因此,除非您需要 NoSQL 的原始速度,否则请使用传统的 RDBMS 并使用表对其进行建模。
-
@halfer 除非我不会将数据存储区归类为无模式
-
很公平@Tim,谢谢 - 不是我的领域。我同意这太宽泛了,希望 OP 回来修改它!
标签: google-app-engine data-modeling google-cloud-datastore