我在想,也许你可以让index.yaml只指定某些索引(而不是GAE自动为你做的所有索引)。
如果这不是一个好主意,那么处理存储大量属性的另一种方法是什么,而不是将额外的属性存储为blob属性中的序列化对象。
答案 0 :(得分:4)
new improved query planner应生成优化的索引定义。
请注意,您可以使用python中的indexed=False
或Java中的Entity.setUnindexedProperty
将属性设置为无索引。
答案 1 :(得分:2)
一些注意事项:
当您拥有multiple properties that contain "multiple values"时,就会发生爆炸索引,即具有MULTIPLE列表属性的实体,并且这些属性列在复合索引中。在这种情况下,为每个列表属性值组合创建索引条目。换句话说:创建的索引条目等于列表属性大小的乘积。因此,当在一个复合索引下的index.yaml中列出两个条目时,将创建一个包含20个条目的列表属性和另一个包含30个条目的列表属性。
对于简单(非列表)属性,或者实体中只有一个列表属性,不会发生爆炸索引。
如果您未在index.yaml文件中创建复合索引,并且在同一索引中列出至少两个列表属性,则不会发生爆炸索引。
如果你有很多属性而你不需要查询它们,那么你可以简单地将它们放在一个列表或两个并行列表中(以模拟地图),或者序列化它们。最简单的是两个并行列表:如果您将objectify
与embedded classes一起使用,则会自动为您完成。