【问题标题】:GAE datastore data model recommendation for nested "same kind" relations针对嵌套“同类”关系的 GAE 数据存储数据模型推荐
【发布时间】:2019-02-19 16:15:23
【问题描述】:

我已经按照 google 的 Bookshelf App 教程(在 node.js 中)进行操作,而不是书籍目录,我想为生产零件目录建模。

其中一个部分由“子”部分和任务组成。 每个“子”部分都可以再有“子”部分和任务(制造步骤)。

当前实现:目前我只有两种PartsTasks。 部件之间的关系是通过在其子部件中存储父部件的唯一键(parentId)的属性来管理的。我目前(例如)更头痛的是高度嵌套的子部件的价格变化将递归地需要更新所有父部件......

问题:对于此类应用程序的推荐数据存储设计是什么?

它应该解决或更有效的做法:

  • 如果我更改“子子子”零件价格,则需要根据所选计算方法更改所有父零件的价格。
  • 不应限制子部分的深度(我确实读过数据存储区 "nested entity values" 的限制为 20(但可能没有正确理解)。
  • 不应将每个(部分及其所有子部分)“实体组”限制为每秒 1 次写入。我已经阅读过这个限制,但我不确定这是否也适用于所谓的事务(我认为你可以在实体组上这样做)。

【问题讨论】:

    标签: node.js google-app-engine google-cloud-datastore


    【解决方案1】:

    一种可能的解决方案是完全避免将汇总价格存储在 Datastore 中。相反,每个部分或任务的“价格”应该只包括那个东西本身的成本,而不是子部分。

    而是在需要时即时计算价格,将整个零件/子零件/任务树相加。如果您想加快计算速度,请将其存储在 memcache 中(但请确保在更新价格时删除 memcache 键)。

    【讨论】:

    • 感谢大卫的建议。这是可能的,但不会增加计算工作量——如果应用程序主要用于导航而不是更新零件、子零件或任务的数量或价格?我也想了解/知道是否推荐我选择的设计(仅将父唯一 ID 存储到其子部分/任务中)还是应该转向实体组(相同的 KIND 关系)?
    猜你喜欢
    • 2020-04-22
    • 1970-01-01
    • 2012-07-13
    • 2016-10-22
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多