Сколько квот имеет стоимость appadine datastore Query?
На странице appengine Billing and Budgeting Resources говорится, что стоимость "запроса" соответствует "1 читать + 1 маленький за объект, полученный", тогда как "Запрос (только ключи)" сопоставляется с "1 прочитанным + 1 малым на полученную клавишу".
Кажется, это опечатка для меня. Казалось бы, Query все равно должен выполнить полную операцию "get" для каждого возвращаемого объекта. Это предположение неверно? Я ожидал, что стоимость "Запроса" будет "1 читать + 1 читать для каждого получаемого объекта".
Ответы
Ответ 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]
-
Тот же запрос с key_only = True
@1ms datastore_v3.RunQuery real = 5ms api = 0ms cost = 170 billed_ops = [DATASTORE_READ: 1, DATASTORE_SMALL: 10]
(Все затраты, отображаемые в микропенениях (1 доллар равен 100 пенни, 1 пенни равна 1 миллиону микронаселений))
Ответ 2
Хм, это кажется странным. Я предполагаю, что только ключевые запросы обрабатывают только индексы, тогда как обычный запрос также извлекает объект на основе этого ключа.
Во всяком случае, это легко проверить: все запросы имеют стоимость, добавленную в журнал. Создайте один запрос, который выполняет запрос, а другой - с тем же запросом только для ключей, а затем сравните затраты.
Ответ 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 друг от друга. Похоже, документация правильная, как написано.