Примеры цен

На этой странице приведены примеры расчета единиц тарификации в некоторых наиболее распространенных сценариях. Обратите внимание, что объем обработанных данных может различаться в зависимости от плана запроса, формы данных и доступных индексов.

Рекомендуем использовать функцию Query Explain, чтобы лучше понимать стоимость и эффективность ваших запросов.

Операции чтения

Большинство операций чтения включают в себя либо точечное чтение определенного документа, либо сканирование диапазона данных на основе идентификатора. Операции чтения используют единицы чтения. Ниже приведены примеры.

Плата за полнотекстовые поисковые запросы состоит из стоимости выполнения поиска по текстовому индексу и стоимости извлечения документов. Стоимость выполнения поиска по текстовому индексу определяется сложностью запроса и объемом данных, сканируемых в индексе для поиска результатов. Факторы, влияющие на эту стоимость, включают количество и характер поисковых запросов (например, термины, фразы), применяется ли оценка релевантности и количество записей индекса, которые необходимо проверить. Стоимость извлечения релевантных документов зависит от количества и размера документов, полученных после завершения этапа поиска.

В таблице ниже приведены расходы, связанные с выполнением полнотекстовых поисковых запросов для каталога товаров питомника растений. В этом примере предполагается,что в коллекции 200 000 товаров, размер документа каждого товара составляет 2 КиБ, а размер соответствующего индекса текстового поиска – около 100 МиБ.

Запрос Пример кода Расчетное количество единиц чтения, использованных на запрос Расчетная стоимость (регион: us-central1, в долларах США)
Поиск редкого товара "сухая вода" в плоском лотке, в результате которого найдено три документа.
db.products.find(
  {$text: {$search: '"dry water" stack flat'}}
);

10 единиц чтения

7 единиц за полнотекстовый поиск и 3 дополнительные единицы за возвращенные документы.

0,50 долл.США за миллион запросов
Поиск по запросу "все комнатные цитрусовые деревья" возвращает 36 документов.
db.products.find(
  {$text: {$search: '"indoor" "citrus" "tree"'}}
);

42 единицы чтения

6 единиц за полнотекстовый поиск и 36 единиц за возвращенные документы.

2,10 доллара США за миллион запросов
Поиск балконных кашпо, по которому найдено много товаров. Отсортируйте результаты поиска по релевантности и ограничьте до 50 лучших результатов поиска.
db.products.find(
  {$text: {$search: 'balcony planter'}}
).sort({score: {$meta: "textScore"}}).limit(50);

75 единиц чтения

Исходя из 25 единиц за полнотекстовый поиск и 50 дополнительных единиц за возвращенные документы.

3,75 доллара США за миллион запросов

В примерах ниже показано, как разные шаблоны запросов влияют на расходы.

  • Запрос "сухая вода" содержит фразу ("dry water") и дополнительные слова. Поиск по фразе сложнее, поскольку поисковой системе необходимо проверить близость и порядок токенов, что приводит к 7 единицам чтения для фазы поиска. Поскольку совпадений мало, стоимость извлечения документов низкая.
  • Запрос "комнатное" "цитрусовое" "дерево" ищет три отдельных слова. Хотя это немного менее сложный запрос, чем поиск по фразе, он все равно требует поиска нескольких токенов. Стоимость сканирования индекса поиска немного ниже, чем в примере с сухой водой, и составляет 6 единиц чтения, но возвращается 36 документов, что увеличивает общую стоимость.
  • Запрос "балконный ящик для цветов" имеет самую высокую стоимость полнотекстового поиска – 25 единиц. Это связано с тем, что в запросе указана сортировка по релевантности (.sort({score: {$meta: "textScore"}})) для терминов, которые встречаются во многих документах. Чтобы определить 50 наиболее релевантных результатов, поисковая система должна найти все потенциальные совпадения для слов "балкон" или "кашпо", рассчитать показатель релевантности для каждого из них, а затем отсортировать их. Процесс оценки и сортировки большого количества кандидатов в индексе требует значительных вычислительных ресурсов, даже несмотря на то, что в конечном итоге извлекается только 50 документов. Широта терминов в сочетании с накладными расходами на оценку релевантности делает этап поиска более дорогим.

Геопространственные запросы

Плата за геопространственные запросы определяется сложностью запроса, а также конкретными условиями и сортировкой, а также ресурсами, необходимыми для сканирования всех данных в соответствующем геопространственном индексе.

В таблице ниже приведены расходы, связанные с выполнением геопространственных запросов для картографического приложения. В этом примере предполагается,что коллекция содержит 1 000 000 документов,представляющих объекты на карте, причем каждый документ имеет размер 1 КиБ, а соответствующий размер геопространственного индекса составляет примерно 60 МиБ.

Запрос Пример кода Расчетное количество единиц чтения, использованных на запрос Расчетная стоимость (регион: us-central1, в долларах США)
Найти все достопримечательности в радиусе 10 км и вернуть 10 совпадений.
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 10000
    }}})

Всего 16 единиц чтения.

Рассчитывается на основе 6 единиц чтения для геопространственного запроса и 10 дополнительных единиц для возвращенных документов.

0,80 долл.США за миллион запросов
Найти все объекты в радиусе 100 км и вернуть 10 ближайших из 1000 совпадений.
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 100000
    }}}).limit(10)

Всего 19 единиц чтения.

Рассчитано на основе 9 единиц чтения для геопространственного запроса и 10 дополнительных единиц для возвращенных документов.

0,95 доллара США за миллион запросов

В примерах ниже показано, как разные шаблоны запросов влияют на расходы.

  • Запрос с радиусом 10 км. Этот запрос сканирует меньшую географическую область. Поскольку в радиусе 10 км находится только 10 совпадений, поисковой системе нужно выполнить меньше работы, чтобы определить и упорядочить эти точки по расстоянию (как неявно делает $near). В результате стоимость сканирования индекса снижается до 6 единиц чтения.
  • Запрос с радиусом 100 км. Этот запрос охватывает гораздо большую область. Запрос находит 1000 потенциальных совпадений в радиусе 100 км. Чтобы выполнить запрос на 10 ближайших точек, поисковой системе необходимо рассчитать расстояния и отсортировать гораздо больший набор кандидатов (до 1000 точек) в индексе. Эта дополнительная вычислительная работа по просеиванию и ранжированию гораздо большего количества точек является причиной того, что стоимость геопространственного запроса выше и составляет 9 единиц чтения по сравнению с запросом на 10 км, несмотря на то, что он также возвращает только 10 документов.

Показания точечных датчиков

Пример расчета стоимости точечных операций чтения:

  • Точечное чтение одного документа размером 1 КиБ. Расход: 1 единица чтения.
  • Точечное чтение одного документа размером 4 КиБ. Расход: 1 единица чтения.
  • Точечное чтение одного документа размером 1 МиБ. Потребляет 256 единиц чтения.
  • Точечное чтение 100 документов размером 1 КиБ каждый. Расход: 100 единиц чтения.

Сканирование

Ниже приведены примеры сценариев, в которых сканируются документы или записи в индексе.

Сканирование документов

  • Запрос, который сканирует 100 документов по 1 КиБ каждый. Потребляет 25 единиц чтения.

Сканирование индексов

Стоимость сканирования в байтах одинакова независимо от того, сканируется ли документ или индекс. Однако записи в индексе часто меньше по размеру. В результате они часто могут обеспечить более экономичный способ сканирования данных.

  • Запрос, который сканирует 100 записей в индексе, каждая из которых имеет размер 1 КиБ. Расход: 25 единиц чтения.
  • Запрос, который сканирует 100 записей в индексе, по 128 байт каждая. Потребляет 4 единицы чтения.

Минимальный размер документа или записи в индексе

В некоторых случаях для выполнения запроса может не потребоваться читать содержимое документа или записи в индексе. Это включает в себя простые запросы на подсчет, например, подсчет общего количества документов в коллекции. В таких случаях за каждый отсканированный объект взимается минимальная плата, равная стоимости 32 байт.

  • Подсчитайте количество документов в коллекции. Запрос сканирует 1000 элементов в коллекции. Потребляет 8 единиц чтения.

Комбинация сканирования и точечного считывания

Многие запросы выполняют комбинацию сканирования и точечного чтения для выполнения операции.

  • Запрос, который сканирует 128 записей в индексе по 256 байт каждая и выполняет точечное чтение 128 документов по 4 КиБ каждый. Используется 136 единиц чтения, в том числе:
    • 128 единиц чтения для точечного чтения;
    • 8 единиц чтения для сканирования индекса;

Объяснение запроса

Query Explain помогает понять, как база данных выполняет ваши запросы. Эта информация поможет вам оптимизировать запросы.

При использовании Query Explain применяются следующие цены:

  • Query Explain, который выполняет запрос. Применяется стоимость запроса.
  • Объяснение запроса с использованием только плана. Потребляет: 1 единицу чтения (минимальная стоимость запроса)

Операции записи

Плата за операции записи (создание, обновление и удаление) взимается в зависимости от размера документов и индексов, создаваемых, изменяемых или удаляемых во время операции. Операции записи расходуют единицы записи. Единицы записи рассчитываются траншами по 1 КиБ.

Простые операции записи, такие как обновление по идентификатору документа, требуют только затрат на запись. Операции записи, для выполнения которых требуется запрос, дополнительно повлекут за собой расходы на чтение, связанные с запросом.

Ниже приведены примеры.

Создает

  • Создайте новый документ размером 10 КиБ без индексов. Расход: 10 единиц записи.
  • Создание документа размером 1 КиБ с одной записью в индексе размером 256 байт в коллекции. Расход: 2 единицы записи

Изменения

  • Найти документ размером 10 КиБ по идентификатору и обновить его без индексов в коллекции. Расход: 10 единиц записи.
  • Найти документ размером 1 КиБ по идентификатору и обновить одно поле с одной записью в индексе размером 256 байт. Расход: 3 единицы записи. Примечание. Обновление записи в индексе в этой ситуации расходует две единицы записи: одну на удаление и одну на повторное создание записи в индексе.
  • Поиск документа размером 1 КиБ по идентификатору документа без обновления (изменения не вносятся). Потребляет: 1 единицу записи (минимальная стоимость записи).
  • Запрос всех документов размером 1 КиБ в коллекции, который сканирует 1000 документов, и вставка нового поля размером 256 байт без индексов в коллекции: 1000 единиц чтения и 1000 единиц записи.

Удаление

  • Удаление документа размером 1 КиБ, у которого есть один индекс в коллекции. Расход: 2 единицы записи
  • Удаление документа размером 1 КиБ, у которого нет индексов в коллекции. Расход: 1 единица записи.

Создание индексов

При создании индекса плата взимается за записи, созданные или измененные в процессе. Эти расходы возникают каждый раз, когда добавляется или удаляется определение индекса. Записи в индексе оплачиваются так же, как и операции записи: 1 единица записи за 1 КиБ.

  • Создание нового индекса для коллекции, содержащей 500 документов, записи в индексе создаются по 1 КиБ каждая. Расходует 500 единиц записи.
  • Удаление существующего индекса для коллекции, содержащей 500 документов. Размер каждой удаленной записи в индексе составляет 1 КиБ. Расходует 500 единиц записи.