我有以下情况
class M(db.Model):
a = db.ReferenceProperty(A)
x = db.ReferenceProperty(X)
y = db.ReferenceProperty(Y)
z = db.ReferenceProperty(Z)
items = db.StringListProperty()
date = db.DateTimeProperty()
我想查询按日期排序的(a),(x,y或z)和(项目)的查询.
mm = M.all().filter('a =', a1).filter('x =', x1).filter('items =', i).order('-date')
例如,永远不会在x和y上同时具有过滤器的查询.
因此,我的问题是:
1)我应该创建几个(和哪个)索引?
2)我可以在商品上添加多少个“字符串”? (我想添加几千个)
3)如果有1000个项目,单个“ M”上将有多少个索引记录?
我还不太了解这个索引,并且正在杀死我.您的帮助将不胜感激:)
解决方法:
>对于给定的条件,您只需要创建三个复合索引:a,x,项,日期,a,y,项,日期,a,z,项,日期.请注意,列表属性为列表中的每个属性创建一个索引条目.
>每个实体最多只能有5000个索引条目.如果只有三个复合索引,则其值为5000/3 = 1666(单个列表属性的上限为1000).
>仅在三个复合索引的情况下,3 * 1000 = 3000.
注意:以上假设您没有每个属性的内置索引(=属性另存为未索引).否则,您需要考虑2N的内置索引,其中单个属性的数量为N(对于asc,desc,为2).在您的情况下,这将是2 *(5 no_items),因为项是一个列表属性,并且每个条目都会创建一个索引条目.