【问题标题】:Calculating the sum of a variable within all children (recursive)计算所有子项中变量的总和(递归)
【发布时间】:2016-02-13 11:56:38
【问题描述】:

我有一个模型如下:

class SomeModel(ndb.Model):
  parent = ndb.KeyProperty()
  someint = ndb.IntegerProperty(default = 2)
  sum_of_child_some_int = ndb.IntegerProperty()

parent 属性要么什么都没有(在顶级父级的情况下),要么是指向另一个 SomeModel 实体的 Key。

我的问题是,计算 SomeModel 父母的所有孩子的所有 someint 之和的最有效方法是什么?它是递归的,所以一个孩子本身可以有一个孩子,并且 someint 也需要被计算在内。

我看到它可以在写入时完成 - 只需递归地写入实体父母。但它可以在阅读时完成,还是总是太贵?

【问题讨论】:

    标签: python-2.7 google-app-engine google-cloud-datastore app-engine-ndb


    【解决方案1】:

    如果您不想在写入时输入该数字,您可以使用祖先查询来获取给定实体的所有子实体并提取 someint 属性。如果您要这样做,我认为最有效的方法是使用projection queries

    请记住,如果您在放置实体时不写该总和,则每次请求时都必须进行总和(尽管您可能会得到缓存的结果),这听起来有点浪费。内存很便宜,添加另一个在写入时更新的属性对我来说似乎是最好的主意。

    顺便说一句,也许您不需要将父级作为 KeyProperty,ancestor 可能是更好的方法。

    【讨论】:

      猜你喜欢
      • 2019-09-26
      • 1970-01-01
      • 2013-11-26
      • 2020-05-25
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      相关资源
      最近更新 更多