我有一个包含超过 200 万个条目的 Google App Engine 实体,它占用了大约 2GB。根据datastore统计,内置索引13GB(7500万条),复合索引1GB(400万条)。
我了解复合索引的大小与我在 index.yaml 文件中定义的索引数量有关。
但是,为什么我的内置索引比数据本身大得多,我可以做些什么来减少内置索引?
我有一个包含超过 200 万个条目的 Google App Engine 实体,它占用了大约 2GB。根据datastore统计,内置索引13GB(7500万条),复合索引1GB(400万条)。
我了解复合索引的大小与我在 index.yaml 文件中定义的索引数量有关。
但是,为什么我的内置索引比数据本身大得多,我可以做些什么来减少内置索引?
默认情况下,大多数模型属性都被索引,请参阅此处: 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()。