使用GAE数据存储关系与平面类型设计

时间:2016-06-21 10:05:15

标签: google-app-engine data-modeling google-cloud-datastore

我们需要在GAE数据存储区中实施。有一组文件(以百万计),每个文件都有一个所有者,一些评论和修订与之相关。

如果文档的所有者离开组织,那么我们需要将文档的所有权更改为执行上次修订的人员。我们还需要保留每个文档的修订和注释。此所有权更改将由将逐个处理每个文档的作业实现。

是否在实体之间建立父子关系是正确的方法Document,Comment和Revision之类的文档是评论和修订作为其子级的父级吗?或者以典型的NoSql方式,我们需要展平表并创建一个实体吗?

典型的NoSQL实现只需要插入和读取但不需要更新。这是Google数据存储区的工作方式吗?请澄清。

我们的研究表明,我们可以建立关系,但看起来更像是RDBMS。

1 个答案:

答案 0 :(得分:1)

要选择正确的架构设计,您应该明确计划如何处理数据并牢记数据存储限制。简而言之:

  1. NoSql方法(单一实体)

    • 每个实体组每秒更新一次
    • 每次读取和写入整个实体(投影查询除外)
  2. 亲子关系(祖先关系)

    • 以后无法更改
    • 形成单个实体组,以便在阅读查询时实现强一致性
    • 每个实体组每秒更新一次! (所以,如果你有一个包含大量实时评论的案例,这对你不起作用)
  3. RDBMS方法(表格和关系)

    • 数据存储区在多个表上没有连接(因此只在您不打算一起查询的表中拆分数据)
    • 最终一致读取