当在GAE NDB Python中仅执行单个属性查询时,为具有50个索引属性的实体创建了多少个索引

时间:2014-03-30 08:55:16

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

在GAE NDB Python中仅执行单个属性查询时,为具有50个索引属性的实体创建了多少个索引。没有重复的属性

class X(ndb.Model): 
    p1 = ndb.KeyProperty(indexed=False) 

    p2 = ndb.StringProperty(indexed=True) 
    p3 = ndb.StringProperty(indexed=True) 
    :: 
    p51 = ndb.StringProperty(indexed=True) 

我的查询结构(所有查询都只是没有AND,OR,IN的单个属性查询):

q = X.query(X.pn==data)  # pn could be p2, p3, .., p51 
record_list, next_curs, more = q.fetch_page(15)  

此类查询需要多少个索引(如果您同时显示计算步骤也会很棒)

是否会自动生成所有这些索引

将这些索引自己放在index.yaml文件

中会更好吗

我将拥有上述型号的75,000,000(7500万)个实体。实体数量是否会影响模型的索引总数

我是否会达到索引或复合索引的默认限制(如果上述实体或查询需要任何复合索引)

如果我根据三个属性之一(例如,p2或p3或p4)添加排序顺序,上述答案是否会有任何变化

我已经提到以下链接,但无法正确理解 https://developers.google.com/appengine/articles/indexselection

1 个答案:

答案 0 :(得分:2)

您将拥有51个索引:一个用于实体类型,另一个用于每个索引属性。这些索引是自动生成的。

如果您需要在多个属性上创建查询,则需要其他自定义索引。

索引数量不依赖于实体数量。

在75米实体中,您将需要大量存储空间。此外,您的写入成本将非常高,因为对实体的每次更改都会触发所有索引的更新。

我很难想象具有50个索引属性的实体的用例。