我有一个拥有超过200万条目的Google App Engine实体,占用大约2GB。 根据数据存储统计,内置索引为13GB(7500万条目),复合索引为1GB(400万条目)。
我知道我的复合索引的大小与我在index.yaml文件中定义的索引数量有关。
但是,为什么我的内置索引比数据本身大得多,我该怎么做才能减少内置索引?
答案 0 :(得分:3)
默认情况下,大多数模型属性都已建立索引,请参阅此处: https://developers.google.com/appengine/docs/python/ndb/properties picke,json,localstructured,blob&默认情况下,json属性未编入索引。这意味着如果你没有在任何其他属性上指定indexed = False,它将具有内置索引。
class User(ndb.Model):
display_name = ndb.StringProperty(indexed=False) # will not be indexed
modified = ndb.DateTimePropert(indexed=False) # will not be indexed
大多数时候,你有很多这些你永远不会查询的东西。但是现在你不能在已经报告的功能的非索引属性上使用复合索引。 https://code.google.com/p/googleappengine/issues/detail?id=4231
然后,一旦添加了indexed = False并想要删除所有现有的内置索引,您需要在所有现有实体上重新运行entity.put()。