【发布时间】:2011-12-10 02:06:46
【问题描述】:
我在 Google App Engine 上阅读了许多用户组(Fig1、Fig2、Fig3),他们无法弄清楚结算报告中的大量 Datastore 读取来自何处。
您可能知道,Datastore reads 的上限为每天 50K 次操作,超出此预算您必须支付。
50K 操作听起来需要大量资源,但不幸的是,似乎每个操作(查询、实体获取、计数..)都隐藏了几个 Datastore 读取。
是否有可能通过 API 或其他方法知道在常见的 RPC.get 、 RPC.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