1

在 appengine计费和预算资源页面中,它表示“查询”的成本映射到“1 读取 + 1 个小检索实体”,而“查询(仅限键)”映射到“1 读取 + 1 个小每检索到的密钥”。

这对我来说似乎是一个错字。看起来查询仍然需要对返回的每个实体执行完整的“获取”操作。这个假设不正确吗?我本来预计“查询”的成本是“每个检索到的实体1 次读取 + 1 次读取”。

4

3 回答 3

1

嗯,这似乎很奇怪。我猜想只有键的查询只查看索引,而普通查询也会根据该键检索实体。

无论如何,这很容易测试:所有请求都已将成本添加到 log中。创建一个执行查询的请求和另一个具有相同的仅键查询的请求,然后比较成本。

于 2012-08-12T16:28:01.633 回答
1

正如彼得建议的那样,我刚刚针对常规查询测试了仅键查询。

这是常规查询:

def test_query():
  q = Project.all()
  q.run()

  return 'Query test complete.'

和日志:

70.162.229.226 - - [02/Sep/2012:20:46:51 -0700] "GET /query HTTP/1.1" 200 124 - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1" "www.kicksaver.net" ms=28 cpu_ms=0 cpm_usd=0.000014 instance=00c61b117c79c7b82c3798e359e96ca71deb39

仅键查询:

def test_key_query():
  q = Project.all()
  q.run(keys_only=True)

  return 'Keys only test complete.'

和日志:

70.162.229.226 - - [02/Sep/2012:20:46:56 -0700] "GET /keys_only HTTP/1.1" 200 128 - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1" "www.kicksaver.net" ms=29 cpu_ms=0 cpm_usd=0.000014 instance=00c61b117c79c7b82c3798e359e96ca71deb39

两者都返回cpm_usd=0.000014。我测试了两个不同的应用程序,并使用了一些不同的批量大小和限制,并且这些cpm_usd值始终相等或彼此相差在 0.000001 以内。看起来文档是正确的。

于 2012-09-03T03:59:57.937 回答
1

这绝对看起来像一个错字。cpm_usd 看起来像是一种已弃用的成本衡量方法,与之前的定价模型相关联。

使用最新版本的 AppStats ( Python SDK 1.7.1 ) 有一个工具可以计算数据存储相关的成本。使用交互式游乐场,我很快得到了这些结果:

  • 使用 keys_only=False 查询

    @1ms datastore_v3.RunQuery real=36ms api=0ms cost=770 billed_ops=[DATASTORE_READ:11]

  • 与 keys_only=True 相同的查询

    @1ms datastore_v3.RunQuery real=5ms api=0ms cost=170 billed_ops=[DATASTORE_READ:1, DATASTORE_SMALL:10]

(以小便士显示的所有成本(1 美元等于 100 便士,1 便士等于 100 万小便士))

于 2012-09-11T12:34:36.650 回答