GAE的大表中指数“爆炸”的速度是多少?
下面的文档摘录说明,对于集合值,索引可能会以指数方式“爆炸”。
这是否意味着对于具有两个集合值的对象,第一个集合中的每个值子集都有一个索引条目,与第二个集合中的每个子集配对?或者每个可能的值对只有一个索引条目?
widget:{
mamas_list: ['cookies', 'puppies']
papas_list: ['rain', 'sun']
}
cookies rain
cookies puppies rain
cookies puppies rain sun
cookies sun
cookies rain sun
puppies rain
puppies sun
puppies rain sun
cookies rain
cookies sun
puppies rain
puppies sun
来源:https://developers.google.com/appengine/docs/python/datastore/indexes#Index_Limits
可以为同一属性提供多个值的实体 每个值的单独索引条目;再次,如果数量 可能的值很大,这样的实体可以超过进入限制。
在具有多个实体的情况下情况变得更糟 属性,每个属性可以采用多个值。以适应 这样的实体,索引必须包含每个可能的条目 财产价值的组合。 引用多个的自定义索引 每个属性都有多个值,可以组合“爆炸”, 需要大量条目的实体只有一个 相对较少的可能属性值。 (摘自:)
答案 0 :(得分:2)
克里斯,
如果您为多个重复属性显式添加index.yaml条目,并且保存到表中的对象具有太多多个属性,则只会出现“爆炸索引问题”。
在示例中,index.yaml是否添加了此索引?
- kind: widget
properties:
- name: mamas_list
- name: papas_list
如果将示例对象保存到数据存储区:
widget(mamas_list=['a', 'b'], papas_list['c', 'd']).put()
将保存4个不同的索引:
['a', 'c'] ['a', 'd'] ['b', 'c'] ['b', 'd']
添加此索引的全部目的是允许通过以下两个属性进行查询:
widget.query().filter(mamas_list=='a').filter(papas_list=='d').fetch()
您可以使用zig-zag算法索引始终避免爆炸索引(此示例中未找到):
http://www.google.com/events/io/2010/sessions/next-gen-queries-appengine.html