【问题标题】:How many Datastore reads consume each Fetch, Count and Query operations?每个 Fetch、Count 和 Query 操作有多少 Datastore 读取?
【发布时间】:2011-12-10 02:06:46
【问题描述】:

我在 Google App Engine 上阅读了许多用户组(Fig1Fig2Fig3),他们无法弄清楚结算报告中的大量 Datastore 读取来自何处。
您可能知道,Datastore reads 的上限为每天 50K 次操作,超出此预算您必须支付。

50K 操作听起来需要大量资源,但不幸的是,似乎每个操作(查询、实体获取、计数..)都隐藏了几个 Datastore 读取。

是否有可能通过 API 或其他方法知道在常见的 RPC.getRPC.runquery 调用后面隐藏了多少 Datastore 读取?

Appstats 在这种情况下似乎没用,因为它只提供 RPC 详细信息,而不是隐藏的读取成本。

有一个像这样的简单模型:

class Example(db.Model):
    foo = db.StringProperty()    
    bars= db.ListProperty(str)

1000 个实体,我对这些操作的成本感兴趣:

items_count =  Example.all(keys_only = True).filter('bars=','spam').count()

items_count = Example.all().count(10000) 

items = Example.all().fetch(10000)

items = Example.all().filter('bars=','spam').filter('bars=','fu').fetch(10000)

items = Example.all().fetch(10000, offset=500)

items = Example.all().filter('foo>=', filtr).filter('foo<', filtr+ u'\ufffd')

【问题讨论】:

  • 我认为返回的每个实体都是一次读取,如果您有一个 ref 道具,那么您第一次访问它也是一次读取。请注意, fetch(X) 并不意味着如果计数太高则返回 X 个实体,那么它将以批量方式工作,并且每个批量都将计为数据读取(批量大小)。我不知道 count(X) 在数据读取方面是如何工作的,它应该算作单次读取,但这是一厢情愿的想法。

标签: google-app-engine profiling rpc google-cloud-datastore billing


【解决方案1】:

http://code.google.com/appengine/docs/billing.html#Billable_Resource_Unit_Cost。 查询花费您 1 次阅读加上每个返回实体的 1 次阅读。 “返回”包括被偏移量或计数跳过的实体。 因此,每一个都有 1001 次读取:

Example.all(keys_only = True).filter('bars=','spam').count() 
Example.all().count(1000)
Example.all().fetch(1000)
Example.all().fetch(1000, offset=500)

对于这些,收费的读取数是 1 加上匹配过滤器的实体数:

Example.all().filter('bars=','spam').filter('bars=','fu').fetch()
Example.all().filter('foo>=', filtr).filter('foo<', filtr+ u'\ufffd').fetch()

您应该考虑将计数存储在数据存储中,而不是使用计数,如果您需要每秒更新一次以上的计数,则分片。 http://code.google.com/appengine/articles/sharding_counters.html

您应该尽可能使用游标而不是偏移量。

【讨论】:

  • 我在您发布的链接中看不到任何参考,即每个返回的实体需要 1 次读取,实际上我没有看到任何提及数据存储读取的内容。
【解决方案2】:

只是为了确保:

我几乎可以肯定:

Example.all().count(10000)

这个使用小型数据存储操作(无需获取实体,仅获取键),因此这将计为 1 次读取 + 10,000(最大)次小型操作。

【讨论】:

  • 你是对的 - “小操作”受上面表达式的影响,而不是“读取操作”。刚刚在一个 GAE 项目上检查过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
  • 2014-07-26
  • 2020-08-17
  • 2015-09-20
相关资源
最近更新 更多