gpt4 book ai didi

python - 关于 appengine 索引的 3 个问题

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:45 25 4
gpt4 key购买 nike

我遇到了以下情况

class M(db.Model):

a = db.ReferenceProperty(A)

x = db.ReferenceProperty(X)
y = db.ReferenceProperty(Y)
z = db.ReferenceProperty(Z)

items = db.StringListProperty()

date = db.DateTimeProperty()

我想进行按日期排序的 (a)、(x、y 或 z) 和 (items) 的查询,即

mm = M.all().filter('a =', a1).filter('x =', x1).filter('items =', i).order('-date')

例如,永远不会有同时对 x 和 y 进行筛选的查询。

所以,我的问题是:

1) 我应该创建多少(以及哪些)索引?

2) 我可以在项目上添加多少个“字符串”? (我想以千为单位添加)

3)如果有1000条,单个“M”上有多少条索引记录?

我还不太了解这个索引的东西,这让我很烦。非常感谢您的帮助:)

最佳答案

这篇文章很好地解释了索引/爆炸索引,它实际上适合你的例子:https://developers.google.com/appengine/docs/python/datastore/queries#Big_Entities_and_Exploding_Indexes

您最大的问题是您可能会遇到每个实体 5000 个索引的限制以及数千个项目。如果你为 a, x, items (1000 items) 取一个索引,date: |a||x||items|*|date| == 1*1*1000*1 == 1000。

如果项目中有 5001 个条目,put() 将失败并出现相应的异常。

从您提供的示例来看,无论是过滤 x、y 还是其他任何内容似乎都无关紧要,因为该属性只有 1 个,因此您不会遇到索引爆炸的机会。 1*1 == 1。

现在,如果您有两个列表属性,您需要确保它们分别被索引,否则您会得到一个爆炸式索引。例如,如果您有 2 个列表属性,每个属性包含 100 个项目,那么将生成 100*100 个索引,除非您拆分它们,否则结果将只有 200 个(假设所有其他属性都是非列表)。

关于python - 关于 appengine 索引的 3 个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10570780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com