Примеры цен

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

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

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

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

Charges for full-text search queries are distinguished between the cost to perform a search on a text index and the cost to retrieve the documents. The cost to perform a search on a text index is determined by the complexity of the query and the amount of data scanned in the index to find the results. Factors influencing this cost include the number and nature of search terms (eg terms, phrases), whether relevance scoring is applied, and the number of index entries that need to be examined. The cost for retrieving relevant documents is based on the number and size of documents fetched after the search phase is complete.

В таблице ниже указаны затраты, связанные с выполнением полнотекстовых поисковых запросов к каталогу товаров интернет-магазина питомника растений. В этом примере предполагается наличие коллекции из 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 документов, что увеличивает общую стоимость.
  • 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.

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

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

В таблице ниже указаны затраты, связанные с выполнением геопространственных запросов для картографического приложения. В этом примере предполагается наличие коллекции из 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 единиц чтения.
  • 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.

Точка читает

Пример выставления счетов за чтение точек:

  • Точечное чтение одного документа размером 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 единиц записи.