ComputedProperty的GAE NDB性能与相关模型计数的按需查找

Bri*_*unt 3 google-app-engine app-engine-ndb google-cloud-datastore

使用Google App Engine,我很好奇是否有人可以阐明使用ComputedProperty按需计算与相关模型计数的性能特征(读写).

ComputedProperty具有允许对属性进行索引的独特优势,但我只是对阅读和写入的速度比较感到好奇.

例如,给定两个模型:

class Car(ndb.Model):
  owner_key = ndb.KeyProperty(kind='Owner', indexed=True)

class Owner(ndb.Model)
   def cars_count(self):
       ndb.query(Car.owner_key == self.key).count()

   cars_count_prop = ndb.ComputedProperty(cars_count)
Run Code Online (Sandbox Code Playgroud)

这个问题真的分解成如下内容:

  1. 写作有多慢,Owner因为它有cars_count_prop
  2. 如何更快的读取cars_count_propcars_count

或者,换句话说:

  1. 每个读写的渐近计算复杂度(big-O)是什么?
  2. 什么是平均案例计算复杂性 - 对于Jay Leno以外的人(即Car每个实例的数量很少Owner)?
  3. 阅读和写入的等待有多少是计算复杂性,以及数据库/内存缓存查找的数量是多少?

Gui*_*sum 6

当您更新所有者实体时,将重新计算查询.这不可能是好事.查询的复杂性不是问题.但如果你真的想知道,你必须对它进行基准测试.

  • 即使在这些情况下,计算属性也不会为您节省任何内容 - 每次您询问其值时它仍会运行查询!使用计算属性的关键是当你想*索引*计算的值时.但是这个例子不是一个好的候选者,因为每次将汽车添加到给定的所有者(或从中删除)时,存储的值都会变得陈旧.您可以通过在获取或处置汽车时向所有者添加读取/写入周期来解决此问题,但是您可以手动存储计数... (2认同)