【问题标题】:How much quota does an appengine datastore Query cost?appengine 数据存储区查询需要多少配额?
【发布时间】:2012-08-09 01:11:26
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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 万小便士))

    【讨论】:

    • 很好的答复 - 我认为您在 appstats 中查看实际成本是正确的。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我刚刚按照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 以内。看起来文档是正确的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-27
        • 1970-01-01
        • 2015-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-15
        • 1970-01-01
        相关资源
        最近更新 更多