python-关于appengine索引的3个问题

我有以下情况

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),因为项是一个列表属性,并且每个条目都会创建一个索引条目.

上一篇:解析JSON:多级数组


下一篇:Google机器人会从javascript document.write()索引文本吗?