Google App Engine数据存储区中的索引和索引条目限制

LJS银

我在理解索引如何在GAE数据存储区中工作时遇到了一些问题,特别是我真正不清楚的是与索引相关的限制。
据我了解,可以在datastore-indexes.xml文件中创建一些自定义索引,此外,数据存储区还将生成一些自动索引以匹配用户查询。
第一个问题是:在配额页面(https://cloud.google.com/appengine/docs/quotas#Datastore)中定义的“索引数”配额限制仅引用到datastore-indexes中定义的自定义索引。 xml,还是也适用于自动生成的索引?

让我难忘的另一个概念是“单个查询的索引条目”。
假设我没有多维属性(即没有列表),并且我有一些类型为“ KindA”的实体。然后定义两组实体属性:
-组1:具有arbitray名称和布尔值的
属性-组2:具有arbitray名称和double值的属性

在我的世界中,任何KindA实体最多可以具有Group1的N个属性和Group2的N个属性。对于任何属性P,都会创建一个索引表,并且具有该P集的每个实体都将在P索引表中添加一行(对吗?)。因此,最初,任何KindA实体对于每个最大值都有1个条目。2N个属性(因此每个实体总共2N个索引条目总数)对吗?
如果这是正确的话,那么我可以创建一个属性数量有限的实体,但是这很奇怪,因为我一直都读到一个实体可以具有无限的属性...(不考虑大小限制)。
但是,现在让我们假设我的应用程序允许用户使用Group1(布尔值1)的属性上任意长的AND过滤器序列来查询KindA实体。因此,人们可以查询以下内容:

find all entities in KindA where prop1=true AND prop2=true ... AND propM = true  

在这种情况下,查询仅包含等式,因此不需要自定义索引(https://cloud.google.com/appengine/docs/python/datastore/indexes#Index_configuration)。

但是,如果我想使用GroupB的属性进行订购怎么办?在这种情况下,我需要任何不同查询权限的索引(根据过滤属性名称的组合而不同)?
在我的developermnet服务器中,我尝试不指定任何自定义索引,而GAE会为我生成它们(但是,任何时候我重新启动以前生成的索引都会被删除)。在这种情况下,一个信号KindA实体在单个查询索引中有多少个索引条目?我之所以说1是因为GAE文档所说:

该属性也可能包含在索引配置文件(index.yaml)中声明的其他自定义索引中。如果一个实体没有列表属性,则在每个这样的自定义索引中(对于非祖先索引)最多具有一个条目,或者对于每个实体的祖先(对于祖先索引)都具有一个条目。

因此,从理论上讲,如果N受限制,那么对于“实体的索引条目的最大数量”(https://cloud.google.com/appengine/docs/java/datastore/#Java_Quotas_and_limits)来说,我是安全的

但是,接收200多个不同的查询呢?会导致GAE自动生成200多个自定义索引(一个用于不同的查询)?如果是,这些索引是否会自动产生影响索引数限制(即200)?
如果是,则说明我不能让用户执行此查询(恕我直言,这是非常基本的)。我误会了吗?

詹斯卡斯

首先,我试图理解您的问题,但我很难理解。

200索引限制仅计入使用查询定义的索引(或由devappserver自动为您定义)。这意味着将单独为索引属性创建的索引不计入此限制。

您为每个索引属性创建的2N个自动索引都是正确的。

只要您不超过每个实体1MB的限制,就可以在任何实体中建立任何数量的索引属性。但是..这实际上取决于存储的属性的内容。

对于在索引属性中为您创建的索引……您并没有真正的限制,而是增加了成本,因为您为每个添加的属性增加的每个实体放置的写入和存储量都会增加。

使用排序顺序时,使用自动索引时只能使用一种排序顺序。更多的排序顺序将需要一个复合索引(您的自定义索引)。因此,如果您已经在使用相等过滤器,则无论如何都需要一个自定义索引。

因此,是的,在您的示例中,devapp服务器将为您将要执行的每个查询创建一个复合索引。但是,您可以通过删除不需要的索引来手动减少此索引。查询计划者可以使用查询时间通过合并不同的索引来找到您的结果,如下所示:

https://cloud.google.com/appengine/articles/indexselection

是的,index.yaml上的每个索引定义都将计入200个限制。

我发现,当您知道如何对gae应用进行编程时,您实际上并不会使用过多的复合索引。您需要权衡用户需要做什么和不需要做什么。并且还要在执行查询方面的工作之间进行平衡,或者只是查询所有内容并按代码进行过滤(这实际上取决于您可以在该特定种类中拥有的最大实体个数)。

但是,如果您尝试执行一些对用户可用的复杂查询,那么也许不是数据存储的选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算在Google App Engine数据存储区中占得分和日期的索引

来自分类Dev

Google App Engine数据存储区非复合索引

来自分类Dev

Google App Engine数据存储区重新索引现有实体

来自分类Dev

Google App Engine:对数据存储中的条目进行计数

来自分类Dev

Google App Engine中的数据存储区与Cloud SQL

来自分类Dev

Google App Engine数据存储区中的多线程

来自分类Dev

Google App Engine Java数据存储区查询-是否限制结果?

来自分类Dev

Google App Engine Java数据存储区查询-是否限制结果?

来自分类Dev

Google数据存储区中的索引

来自分类Dev

Google App Engine数据存储区查询返回陈旧数据

来自分类Dev

Google App Engine(Python)-数据存储区正在复制实体

来自分类Dev

Google App Engine数据存储区的大表是如何设计的?

来自分类Dev

Google App Engine数据存储区-密钥与标识符

来自分类Dev

Google App Engine NDB数据存储区的简单说明

来自分类Dev

查询所有实体的Google App Engine数据存储区

来自分类Dev

在Google App Engine上运行数据存储区查询

来自分类Dev

Google App Engine数据存储区按属性删除实体

来自分类Dev

Google App Engine数据存储区获得财产的价值

来自分类Dev

Google App Engine数据存储区如何获取Key <?>的实体

来自分类Dev

在Google App Engine数据存储区上执行大型查询

来自分类Dev

如何使用Java从Google App Engine数据存储区中的实体提取属性

来自分类Dev

在Google App Engine中,如何在更新SDK之后使开发数据存储区保持可用状态?

来自分类Dev

如何在Google App Engine数据存储区中添加动态属性

来自分类Dev

如何从Google App Engine(Java)数据存储区中的子实体查询父实体?

来自分类Dev

在Google App Engine数据存储区中搜索以前缀开头的字符串

来自分类Dev

覆盖Google App Engine- Java中的数据存储区实体

来自分类Dev

列出Google App Engine数据存储区中的所有实体时出现AttributeError

来自分类Dev

Google App Engine数据存储区关键字段中的“ name =“代表什么?

来自分类Dev

如果实体之前有未索引的数据,如何在Google App数据存储中建立索引?

Related 相关文章

  1. 1

    计算在Google App Engine数据存储区中占得分和日期的索引

  2. 2

    Google App Engine数据存储区非复合索引

  3. 3

    Google App Engine数据存储区重新索引现有实体

  4. 4

    Google App Engine:对数据存储中的条目进行计数

  5. 5

    Google App Engine中的数据存储区与Cloud SQL

  6. 6

    Google App Engine数据存储区中的多线程

  7. 7

    Google App Engine Java数据存储区查询-是否限制结果?

  8. 8

    Google App Engine Java数据存储区查询-是否限制结果?

  9. 9

    Google数据存储区中的索引

  10. 10

    Google App Engine数据存储区查询返回陈旧数据

  11. 11

    Google App Engine(Python)-数据存储区正在复制实体

  12. 12

    Google App Engine数据存储区的大表是如何设计的?

  13. 13

    Google App Engine数据存储区-密钥与标识符

  14. 14

    Google App Engine NDB数据存储区的简单说明

  15. 15

    查询所有实体的Google App Engine数据存储区

  16. 16

    在Google App Engine上运行数据存储区查询

  17. 17

    Google App Engine数据存储区按属性删除实体

  18. 18

    Google App Engine数据存储区获得财产的价值

  19. 19

    Google App Engine数据存储区如何获取Key <?>的实体

  20. 20

    在Google App Engine数据存储区上执行大型查询

  21. 21

    如何使用Java从Google App Engine数据存储区中的实体提取属性

  22. 22

    在Google App Engine中,如何在更新SDK之后使开发数据存储区保持可用状态?

  23. 23

    如何在Google App Engine数据存储区中添加动态属性

  24. 24

    如何从Google App Engine(Java)数据存储区中的子实体查询父实体?

  25. 25

    在Google App Engine数据存储区中搜索以前缀开头的字符串

  26. 26

    覆盖Google App Engine- Java中的数据存储区实体

  27. 27

    列出Google App Engine数据存储区中的所有实体时出现AttributeError

  28. 28

    Google App Engine数据存储区关键字段中的“ name =“代表什么?

  29. 29

    如果实体之前有未索引的数据,如何在Google App数据存储中建立索引?

热门标签

归档