Python 正确使用GAE ndb.ComputedProperty
在我的GAE项目中,我有一类视频,我希望能够通过他们的分数进行搜索,即上升票减去下降票。我希望能够查询这个值,并希望以最有效的方式获取它。我认为,使用计算属性获取is是以下方式的最佳方式:Python 正确使用GAE ndb.ComputedProperty,python,google-app-engine,app-engine-ndb,Python,Google App Engine,App Engine Ndb,在我的GAE项目中,我有一类视频,我希望能够通过他们的分数进行搜索,即上升票减去下降票。我希望能够查询这个值,并希望以最有效的方式获取它。我认为,使用计算属性获取is是以下方式的最佳方式: class Video(ndb.Model): title = ndb.StringProperty(required = True) description = ndb.TextProperty() upvotes = ndb.IntegerProperty(required =
class Video(ndb.Model):
title = ndb.StringProperty(required = True)
description = ndb.TextProperty()
upvotes = ndb.IntegerProperty(required = True)
downvotes = ndb.IntegerProperty(required = True)
score = ndb.ComputedProperty(lambda self: self.upvotes - self.downvotes)
但是我很好奇ComputedProperty是否有任何性能延迟?每次给出向上投票或向下投票时,只增加或减去分数值是否更有效?对于简单的计算(如您的示例中的计算),应该不会有太大的性能阻力。是的,每次读取数据时都会运行计算,但首先构建结果集涉及的逻辑要多得多;一次减法不会影响任何事情
对于更复杂的计算,是的,可能会影响性能。对于简单的计算(如您的示例中的计算),应该不会有太大的性能阻力。是的,每次读取数据时都会运行计算,但首先构建结果集涉及的逻辑要多得多;一次减法不会影响任何事情
对于更复杂的计算,是的,可能会影响性能。好的,谢谢,这对我来说是一个更干净的解决方案,所以我希望它很好。只是一个小小的更正:计算属性只在写入时运行,而不是读取时运行@罗布柯蒂斯,这是不对的。“当实体从数据存储中读回时,将忽略存储的值;相反,只要请求该值,就会通过调用函数重新计算该值”@Amber,啊,我明白了,我已经太注意了警告:ComputedProperties不是在查询中计算的,而是在put()上计算的,但我现在看到了更多内容。谢谢你的更正!好的,很好,谢谢,这对我来说是一个更干净的解决方案,所以我希望它是好的。只是一个小的更正:计算属性只在写时运行,而不是在读时运行@罗布柯蒂斯,这是不对的。“当实体从数据存储中读回时,将忽略存储的值;相反,只要请求该值,就会通过调用函数重新计算该值”@Amber,啊,我明白了,我已经太注意了警告:ComputedProperties不是在查询中计算的,而是在put()上计算的,但我现在看到了更多内容。谢谢你的更正!它不是
lambda self
?它不是lambda self
?