google-app-engine - бесплатно - google compute engine pricing




Сколько записей Datastore потребляет каждую операцию Fetch, Count и Query? (2)

Просто чтобы убедиться:

Я почти уверен:

Example.all().count(10000)

В этом случае используются небольшие операции хранилища данных (нет необходимости извлекать сущности, только ключи), поэтому это будет считаться 1 прочитанной + 10 000 (макс.) Небольших операций.

Я читаю в группах Google App Engine много пользователей ( Fig1 , Fig2 Fig1 , Fig2 ), которые не могут понять, откуда Fig2 большое количество Datastore в своих отчетах о выставлении счетов.
Как вы, возможно, знаете, Datastore читает , ограничено до 50K операций / день, над этим бюджетом вы должны заплатить.

Операции 50K звучат как много ресурсов, но, к несчастью, кажется, что каждая операция (Query, Entity fetch, Count ..) скрывает несколько файлов Datastore.

Можно ли узнать через API или какой-либо другой подход, сколько RPC.get RPC.runquery скрыто за общими RPC.get , 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')

См. 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 вы должны рассмотреть вопрос о хранении счета в хранилище данных, оговорено, если вам нужно обновить счет более одного раза в секунду. http://code.google.com/appengine/articles/sharding_counters.html

По возможности вы должны использовать курсоры вместо смещения.