Сколько квот имеет стоимость 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 друг от друга. Похоже, документация правильная, как написано.