GAE数据存储区索引限制

时间:2014-11-05 07:41:05

标签: google-app-engine google-cloud-datastore

第一,我的应用程序,在配额细节中,索引的数量达到200的200.但是当我计入数据存储索引时,其超过200个索引。那为什么我可以添加超过200个索引?

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(); 事件我为它定义了索引,每个东西都运行正常。 我不明白为什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

  1. 各个属性的索引不计入限制。您不必在任何地方定义它们 - 如果属性已编入索引,您可以在过滤器中使用它,并且可以使用它来对查询结果进行排序。

  2. 您只需要定义复合索引,顺便说一句,App Engine Java SDK会自动生成它们。我不记得上次我必须手动添加索引,但我们在本地进行了大量测试,这有助于自动生成所有索引。

  3. 如果您需要超过200个复合索引,那么您几乎肯定会做错事。即使使用最复杂的数据模型,200也应该是一个无法达到的疯狂限制。

  4. 举个例子,我有一个包含20个不同模块的应用程序,在非常复杂的关系中有近百种不同的实体,以及数千个实体属性的总数。 App Engine控制台显示此应用的24个索引。

    请注意,在许多情况下,检索所有实体然后过滤掉它们会更便宜,更快,而不是创建许多复合索引。原因很简单:索引可以轻松占用比数据本身更多的空间,实体的写入成本与索引属性和复合索引的数量成正比。因此,每个索引属性的各个索引之上的200个复合索引肯定会成为主要的成本和性能问题。通过仔细设计数据模型,还有其他方法可以避免不必要的索引。