Примеры цен

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

Рекомендуем использовать функцию 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,1 доллара США за миллион запросов
Поиск балконных кашпо, по которому найдено много товаров. Отсортируй результаты поиска по релевантности и покажи только первые 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 единиц записи.