Примеры цен

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

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

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

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

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

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

Запрос Пример кода Примерное количество единиц чтения, потребляемых на один запрос Ориентировочная стоимость (регион: центральная часть США, в долларах США)
Поиск редкого плоского лотка для хранения документов с посудой, предназначенной для хранения в сухих условиях, привел к обнаружению 3 документов.
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. Поскольку совпадений очень мало, стоимость поиска документов низкая.
  • Поиск по запросу "indoor" "citrus" "tree" использует три отдельных термина. Хотя он немного менее сложен для каждого термина, чем поиск по фразе, он все же требует поиска по нескольким токенам. Стоимость сканирования поискового индекса немного ниже (6 единиц чтения), чем в примере с "dry water", но возвращается 36 документов, что увеличивает общую стоимость.
  • Поиск по запросу «балконная клумба» имеет самую высокую стоимость полнотекстового поиска — 25 единиц, с существенным отрывом. Это связано главным образом с тем, что результаты необходимо сортировать по релевантности ( .sort({score: {$meta: "textScore"}}) ) по терминам, которые соответствуют множеству документов. Чтобы определить 50 наиболее релевантных результатов, поисковый движок должен найти все потенциальные совпадения для «балкон» или «клумба», вычислить для каждого показатель релевантности, а затем отсортировать их. Этот процесс оценки и сортировки по большому количеству кандидатов в индексе является вычислительно затратным, даже несмотря на то, что в конечном итоге извлекается только 50 документов. Широкий спектр терминов в сочетании с накладными расходами на оценку релевантности делает этап поиска более дорогостоящим.

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

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

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

Запрос Пример кода Примерное количество единиц чтения, потребляемых на один запрос Ориентировочная стоимость (регион: центральная часть США, в долларах США)
Найти все достопримечательности в радиусе не более 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 взимаются следующие сборы:

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

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

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

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

См. следующие примеры.

Создает

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

Обновления

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

Удаляет

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

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

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

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