使用:Google App Engine,Python 2.7,Google NDB数据存储区,GQL。
我编写了一个有很多NDB类型的业务应用程序(ndb.Model) 例如:客户,供应商,供应商,制造商,订单等。
我想向用户显示按各种实体/字段排序的信息:
示例:index.yaml - Customer类可能有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),每种类型约有15个复合索引。如果我遇到200限制,我想确保我有一个解决方法。
不确定为什么Google会将此限制在200,我认为限制应该是每个NDB类型(ndb.Model)可能每个20?
感谢您提出任何建议
答案 0 :(得分:3)
您需要再次考虑您的数据模型。您的主要问题不是200个索引的限制。如果您实现了正在考虑的模型,那么索引的存储空间将比数据多出许多倍,并且您的写入成本将是天文数字。
每次保存数据对象时,每个实体加上每个索引属性加上每个自定义索引,都会产生成本。使用您的数据模型,每个实体的每次更新最终支付的费用将超过必要的15-20倍。
您可能有使用SQL数据库的经验,但数据存储区非常不同。您必须以不同方式对数据建模。
我构建了一个非常复杂的应用程序,其中包含许多不同的实体,它们之间的关系非常复杂。我在这个应用程序中有5个自定义索引。
编辑:
在非关系数据库中有许多数据建模方法。例如,让我们以“名称和状态”索引为例。有多少客户将拥有相同的名称,但在不同的州?检索具有给定名称的所有客户,然后选择属于所需状态的客户,而不是仅为此属性组合创建自定义索引要便宜得多。请记住,读取比写入便宜得多,而且数据大小也更小。
这同样适用于您的所有示例。您可以按名称和订单日期选择所有客户,而在极少数情况下,当两个客户具有相同的名称时,只需删除具有错误代码/类的客户,而不是“代码和名称AND类和LastOrderDate”。