在 Google App Engine 中,我有一个包含 10K 实体的模型,该模型在属性 foo 上有一个索引。找到第一个四分位数、第二个四分位数(中位数)和第三个四分位数实体的最有效方法是什么?我可以获取排序的键列表并以编程方式找到三个四分位键,但下载所有键将无法扩展。更优雅的方法是什么?
sortedValues = MyModel.all(keys_only=True).order('foo').fetch(limit=10000)
在 Google App Engine 中,我有一个包含 10K 实体的模型,该模型在属性 foo 上有一个索引。找到第一个四分位数、第二个四分位数(中位数)和第三个四分位数实体的最有效方法是什么?我可以获取排序的键列表并以编程方式找到三个四分位键,但下载所有键将无法扩展。更优雅的方法是什么?
sortedValues = MyModel.all(keys_only=True).order('foo').fetch(limit=10000)
你试过.fetch(2500,limit=1)
,.fetch(5000,limit=1)
和.fetch(7500,limit=1)
吗?第一个参数对应于偏移量。
但是,文档内容如下,因此这种方法无法为您提供O(1)
性能。
Note: The query has performance characteristics that correspond linearly with the offset amount plus the limit amount.
从这里。
由于四分位数是根据实体排序定义的,不幸的是,除了迭代它们之外,没有办法确定它们。正如cheheen 指出的那样,您可以通过使用偏移参数不获取中间结果来加快速度。