2,https://cloud.google.com/appengine/docs/quotas 免费默认每日索引数量限制为200 *(*。不是每日限制,但总限额)
所以这意味着当你支付它时你会添加超过200个索引?那是真的吗?
3,我的代码:
ModelMeta meta = ModelMeta.get();
List modelList = Datastore.query(meta).filter(meta.fieldA.equal("0"))
.filter(meta.fieldB.equal("1").asList();
事件我为它定义了索引,每个东西都运行正常。
我不明白为什么?
感谢您的帮助。
答案 0 :(得分:3)
各个属性的索引不计入限制。您不必在任何地方定义它们 - 如果属性已编入索引,您可以在过滤器中使用它,并且可以使用它来对查询结果进行排序。
您只需要定义复合索引,顺便说一句,App Engine Java SDK会自动生成它们。我不记得上次我必须手动添加索引,但我们在本地进行了大量测试,这有助于自动生成所有索引。
如果您需要超过200个复合索引,那么您几乎肯定会做错事。即使使用最复杂的数据模型,200也应该是一个无法达到的疯狂限制。
举个例子,我有一个包含20个不同模块的应用程序,在非常复杂的关系中有近百种不同的实体,以及数千个实体属性的总数。 App Engine控制台显示此应用的24个索引。
请注意,在许多情况下,检索所有实体然后过滤掉它们会更便宜,更快,而不是创建许多复合索引。原因很简单:索引可以轻松占用比数据本身更多的空间,实体的写入成本与索引属性和复合索引的数量成正比。因此,每个索引属性的各个索引之上的200个复合索引肯定会成为主要的成本和性能问题。通过仔细设计数据模型,还有其他方法可以避免不必要的索引。