google app engine computedProperty:何时使用?何时不使用?

时间:2015-08-10 16:02:03

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

什么时候在谷歌应用程序引擎中使用ComputedProperty(ndb)在后端(例如在处理程序中)提供一个明显的优势,而不仅仅是计算,而不涉及数据存储?

我阅读的所有内容似乎都表明它几乎无用,只会减慢查询速度(至少在其他情况下不会执行put操作)。

思想?

我确实看到了这个:

"注意:如果应用程序查询计算值,请使用ComputedProperty。如果您只想在Python代码中使用派生版本,请定义常规方法或使用Python内置的@property。"

但这并没有真正解释任何优势(为什么查询,如果你可以推导?)

1 个答案:

答案 0 :(得分:3)

文档在这方面非常清楚,我再次引用它作为参考,Computed Properties部分:

  

注意:如果应用查询计算值,请使用ComputedProperty。如果您只想在Python代码中使用派生版本,请定义常规方法或使用Python内置@property

何时使用?当您需要查询某些派生数据时,需要将其写入数据存储区,以便将其编入索引。

首先想到的例子:您已经存储了用户的生日,但也需要按实际年龄进行过滤,添加属性以获取该值可能是最简单,最有效的解决方案:

age = ndb.ComputedProperty(lambda self: calc_age(self.birthday))

当然,您可以使用一个返回年龄的函数,但只有获得实体后才有用,不能将其用于查询。