appengine数据存储查询的成本是多少?

时间:2012-08-12 15:59:56

标签: google-app-engine google-cloud-datastore objectify

在appengine Billing and Budgeting Resources页面中,它表示“查询”的成本映射为“1个读取+每个实体检索的1个小”,而“查询(仅限密钥)”映射到“1个读取”检索到每个密钥+ 1小。“

这对我来说似乎是一个错字。似乎Query仍然需要对返回的每个实体执行完整的“get”操作。这个假设是不正确的?我原本预计“查询”的费用为“每读取一次实体的1次读取+ 1次 读取 ”。

3 个答案:

答案 0 :(得分:1)

嗯,这看起来很奇怪。我猜测只有查询键才能查看索引,而普通查询也会根据该键检索实体。

无论如何,测试这个很容易:所有请求都有cost added to the log。创建一个执行查询的请求,使用相同的仅键查询创建另一个请求,然后比较成本。

答案 1 :(得分:1)

我刚刚根据建议的Peter测试了一个仅限密钥的查询。

这是常规查询:

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之间。看起来文档是正确的。

答案 2 :(得分: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万微安))