不索引Expando的动态属性

标签:Google App Engine, Python

Expando相比Model来说,多了个动态属性。为了少定义一些模型类,也许用动态属性比较方便,但这又牵扯到一个性能问题:动态属性无法像静态属性一样设置indexed=False。
对我的应用而言,大多数的静态属性是需要索引的,而动态属性则不需要,这便造成了浪费。

在GAE论坛提了半天也没等到好的解决办法,于是自己翻了下源码,发现Model类有个_unindexed_properties私有属性,这里面便是不需要索引的属性名了。

于是这样便可让动态属性不索引:
class A(db.Expando):
 pass

A._unindexed_properties = frozenset(['prop'])

a = A()
a.prop = 1
a.put()
不过由于用到了私有属性,不是很安全,有可能在以后的版本里会出错。

1条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?