Примеры цен

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

Мы рекомендуем использовать функцию 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 единиц записи.
,

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

Мы рекомендуем использовать функцию 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 единиц записи.
,

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

Мы рекомендуем использовать функцию 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 единиц записи.
,

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

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

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

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

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

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

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

Всего 10 считанных единиц.

Based on 7 units for full-text search and 3 additional units for the returned documents.

$0.50 per million queries
Search for all indoor citrus trees, resulting in the retrieval of 36 documents.
db.products.find(
  {$text: {$search: '"indoor" "citrus" "tree"'}}
);

42 total read units

Based on 6 units for full-text search and 36 additional units for the returned documents.

$2.10 per million queries
Search for balcony planters where there are lots of product matches. Sort results by relevance, and limit to the top 50 search results.
db.products.find(
  {$text: {$search: 'balcony planter'}}
).sort({score: {$meta: "textScore"}}).limit(50);

75 total read units

Based on 25 units for full-text search and 50 additional units for the returned documents.

$3.75 per million queries

These examples illustrate how different query patterns impact costs:

  • The "dry water" query involves a phrase ( "dry water" ) and additional terms. Phrase searches are more complex as the query engine needs to check token proximity and order, contributing to the 7 read units for the search phase. Since very few documents match, document retrieval cost is low.
  • The "indoor" "citrus" "tree" query searches for three separate terms. While slightly less complex per term than a phrase search, it still requires looking up multiple tokens. It has a slightly lower search index scan cost of 6 read units, than the "dry water" example, but 36 documents are returned, increasing the total cost.
  • The balcony planter query has the highest full-text search cost of 25 units by a significant margin. This is primarily because it requests results to be sorted by relevance ( .sort({score: {$meta: "textScore"}}) ) on terms that match many documents. To determine the top 50 most relevant results, the query engine must find all potential matches for "balcony" or "planter", calculate a relevance score for each, and then sort them. This scoring and sorting process across a large number of candidates within the index is computationally intensive, even though only 50 documents are ultimately retrieved. The broadness of the terms combined with the overhead of relevance scoring makes the search phase more expensive.

Geospatial Queries

Charges for geospatial queries are determined by the complexity of the query and the specific conditions and sorting utilized, as well as the resources required to scan all the data in the relevant geospatial index.

The following table delineates the charges associated with executing geospatial queries for a maps application. This example assumes a collection of 1,000,000 documents representing points of interest, with each point of interest document being 1KiB, and a corresponding geospatial index size of approximately 60MiB.

Запрос Пример кода Estimated Read Units Consumed Per Query Estimated Costs (region: us-central1 in USD)
Find all points of interest within a maximum of 10km, returning 10 matches.
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 10000
    }}})

16 total read units.

Based on 6 read units for geospatial query and 10 additional units for the returned documents.

$0.80 per million queries
Find all points of interests with a maximum distance of 100km, and return the top 10 closest points of interest out of 1,000 matches
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 100000
    }}}).limit(10)

19 total read units.

Based on 9 read units for geospatial query and 10 additional units for the returned documents.

$0.95 per million queries

These examples illustrate how different query patterns impact costs:

  • 10km Radius Query : This query scans a smaller geographic area. Since it finds only 10 matches within this 10km radius, the query engine has to do less work to identify and order these points by distance (as $near implicitly does). This results in a lower index scan cost of 6 read units.
  • 100km Radius Query : This query covers a much larger area. The query finds 1,000 potential matches within the 100km radius. To fulfill the request for the top 10 closest points, the query engine needs to calculate distances and sort a much larger set of candidates (up to 1,000 points) within the index. This additional computational work of sifting through and ranking many more points is why the geospatial query cost is higher at 9 read units, compared to the 10km query, despite also returning only 10 documents.

Point reads

Example billing for point reads:

  • Point read of a single 1 KiB document. Consumes: 1 read unit
  • Point read of a single 4 KiB document. Consumes: 1 read unit
  • Point read of a single 1 MiB document. Consumes: 256 read units
  • Point read of 100 documents, 1 KiB each. Consumes: 100 read units

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

The following examples include scenarios that scan documents or index entries.

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

  • Query which scans 100 documents, 1 KiB each. Consumes: 25 read units

Scanning indexes

The scanning cost, in terms of bytes, is the same regardless of whether it is a document or index being scanned. However, index entries are often smaller in size. As a result, they can often provide a more cost effective way of scanning data.

  • Query which scans 100 index entries, 1 KiB each. Consumes: 25 read units.
  • Query which scans 100 index entries, 128 bytes each. Consumes: 4 read units.

Minimum document or index entry size

In certain situations it may not be necessary to read the contents of a document or index entry to satisfy a query. This includes simple count queries like counting the total number of documents in a collection. In these situations, a minimum cost of 32 bytes applies per item scanned.

  • Count the number of documents in a collection. The query scans 1000 items in the collection. Consumes: 8 read units.

Combination of scanning and point reads

Many queries perform a combination of scanning and point reads to satisfy an operation.

  • Query which scans 128 index entries, 256 bytes each and performs a point read of 128 documents, 4 KiB each. Consumes: 136 read units, comprised of:
    • 128 read units for point reads
    • 8 read units for index scans

Query Explain

Query Explain helps you understand how the database executes your queries. The details provided can help you optimize your queries.

The following costs apply when using Query Explain:

  • Query Explain which executes the query: Query cost applies.
  • Query Explain using plan only option. Consumes: 1 read unit (minimum cost of a query)

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

Write operations (creates, updates and deletes) are charged based on the size of the documents and indexes being created, modified, or deleted during the operation. Write operations consume write units. Write units are calculated in 1 KiB tranches.

Simple write operations, like update by document ID, only incur the cost of the writes. Write operations which require querying to satisfy the operation will additionally incur the read costs associated with the query.

See the following examples.

Создает

  • Create a new 10 KiB document with no indexes. Consumes: 10 write units
  • Create a 1 KiB document with 1 index entry of 256 bytes on the collection. Consumes: 2 write units

Обновления

  • Find a 10 KiB document by document ID and update with no indexes on the collection. Consumes: 10 write units
  • Find a 1 KiB document by document ID and update 1 field with 1 index entry of 256 bytes. Consumes: 3 write units. Note: Updating an index entry in this situation consumes 2 write units – one to delete and one to recreate the index entry.
  • Find a 1 KiB document by document ID and update nothing (no changes). Consumes: 1 write units (the minimum write costs)
  • Query all 1 KiB documents in a collection, which scans 1,000 documents, and insert a new 256 bytes field with no indexes on the collection: 1000 read units and 1000 writes units.

Удаляет

  • Delete a 1 KiB document, which has 1 index on the collection. Consumes: 2 write units
  • Delete a 1 KiB document, which has no indexes on the collection. Consumes: 1 write unit

Index builds

Index builds charge for the index entries created or modified during the build operation. These costs are incurred anytime an index definition is added or removed. The index entries are billed identically to writes incurring 1 write unit per 1KiB.

  • Create a new index for a collection containing 500 documents, index entries created are 1 KiB each. Consumes 500 write units.
  • Delete an existing index for a collection containing 500 documents, index entries deleted are 1KiB each. Consumes 500 write units.