29

私は Google App Engine グループで多くのユーザー ( Fig1Fig2Fig3 ) を読んでいますが、請求レポートで大量のデータストア読み取りがどこから来たのかを理解できません。
ご存知かもしれませんが、Datastore の読み取りは 1 日あたり 5 万回の操作に制限されており、この予算を超えると支払う必要があります。

50,000 の操作は大量のリソースのように聞こえますが、残念なことに、各操作 (クエリ、エンティティ フェッチ、カウントなど) がいくつかのデータストアの読み取りを隠しているようです。

RPC.getAPI またはその他のアプローチを介して、共通の ,RPC.runquery呼び出し の背後に隠されているデータストア読み取りの数を知ることは可能ですか?

この場合、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')
4

2 に答える 2

10

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()

count を使用する代わりに、1 秒に複数回カウントを更新する必要がある場合は、データストアにカウントを格納することを検討する必要があります。http://code.google.com/appengine/articles/sharding_counters.html

可能な限り、オフセットの代わりにカーソルを使用してください。

于 2011-11-13T21:59:04.790 に答える
3

念のため:

私はほぼ確信しています:

Example.all().count(10000)

これは小さなデータストア操作を使用するため(エンティティをフェッチする必要はなく、キーのみ)、これは1回の読み取り+ 10,000(最大)の小さな操作としてカウントされます。

于 2012-01-13T16:35:12.057 に答える