0

使用:Google App Engine,Python 2.7,Google NDB Datastore,GQL。Google App Engine数据存储200索引限制(index.yaml)

我写的是有许多种NDB业务应用程序(ndb.Model) 例如:客户,供应商,供应商,制造,订单等。

我喜欢与各种实体分类信息向用户呈现/ fields:

示例:index.yaml - 客户类可能有12-15个索引文件条目。

- kind: Customers 
    - properties: 
    - name: Name 
    - name: NewDate 
    - direction: desc 
- kind: Customers 
    - properties: 
    - name: State 
    - name: Name 
- kind: Customers 
    - properties: 
    - name: Country 
    - name: Name 
- kind: Customer 
    - properties: 
    - name: Code 
    - name: Name 
    - name: Class 
    - name: LastOrderDate 
    - direction: desc 

只是一个例子,但我喜欢有大约20-30 NDB样(ndb.Model)s的各约15综合指数。如果我遇到200限制,我想确保我有一个解决方法。

不知道为什么谷歌会限制这个在200,我认为限制应该是每个NDB种类(ndb.Model)也许是20?

谢谢你的任何建议

+0

2014年2月26日发布的新版App Engine SDK - 发行说明版本1.9.0 - 关于“索引数目没有固定限制”,仅适用于Search API或适用于所有应用程序的自定义索引? ? – Brian

+0

问题8305:http://code.google.com/p/googleappengine/issues/detail?id=8305正在解决此问题,正如我所说我认为限制应该是每个NDB种类 – Brian

回答

3

你需要重新考虑一下你的数据模型。您的主要问题不是200个索引的限制。如果您实施您正在考虑的模型,那么您的索引将比数据占用更多的存储空间,并且您的写入成本将是天文数字。

每次保存数据对象时,都会产生每个实体的费用加上每个索引属性加上每个自定义索引的费用。使用您的数据模型,您将最终每次更新每个实体所需的费用超过15-20倍。

您可能有SQL数据库的经验,但数据存储非常不同。你必须以不同的方式建模你的数据。

我构建了一个非常复杂的应用程序,其中有许多不同的实体,它们之间的关系非常复杂。我在这个应用程序中有5个自定义索引。

编辑:

在非关系数据库中有很多数据建模方法。举个例子,以“名称和状态”索引为例。有多少客户会有相同的名称,但在不同的州?使用给定名称检索所有客户会更便宜,然后选择属于所需状态的客户,而不是仅为这些属性组合创建自定义索引。请记住,读取比写入便宜得多,而且数据量更小。

这同样适用于您的所有示例。您可以通过名称和订单日期来选择所有客户,而在非常罕见的情况下,如果两个客户具有相同的名称,则可以不使用“代码和名称AND类和LastOrderDate”,而只使用错误的代码/类来删除。

+0

Andrei,感谢回复。我在大多数领域都有(索引=假),但由于多公司,多用户,安全性,访问客户信息变得复杂,并且创建了自定义索引。 – Brian

+0

此外,用户还有一个导出功能,允许他们从1 - 3个字段中的下拉字段值中进行选择,这些字段根据选择导出信息。 – Brian

+1

行之间的最后一条评论揭示了“将现有关系数据模型移植到数据存储”场景。我赞成安德烈,因为设计应该拥抱云并放弃第三种正常形式。如果这会导致功能痛苦,则可降低用户在该应用的云版本中的预期。对于低效地推进平台的努力是不值得的。另一方面,存储和阅读都很便宜,因此您可以通过按照Andrei的建议反复阅读和丢弃大量记录来保留大量功能。 –

相关问题