Обзор операций Firestore Pipelines

Операции Firestore Pipeline — это ключевая функция Firestore Enterprise Edition, построенная на новом механизме запросов, значительно расширяющем диапазон возможных запросов. Операции Firestore Pipeline используют гибкий синтаксис запросов и особый метод индексирования, где индексы являются необязательными и не создаются автоматически, что позволяет выполнять расширенные операции извлечения данных для приложений.

Особенности работы трубопровода Firestore

В версии Firestore Enterprise и новых операциях Pipeline используется новый, усовершенствованный механизм запросов, который устраняет многие существующие ограничения версии Firestore Standard. Операции Firestore Pipeline предоставляют более 120 новых функций запросов. Возможности операций Firestore Pipeline следующие:

Поэтапный составной синтаксис

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

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

guard let cutoffDate = Calendar.current.date(byAdding: .month, value: -1, to: Date()) else {
  return
}
let snapshot = try await db.pipeline()
  .collection("productViews")
  .where(Field("viewedAt").greaterThan(cutoffDate.timeIntervalSince1970))
  .aggregate([Field("productId").countDistinct().as("uniqueProductViews")])
  .execute()

Расширенные возможности

Запрос Pipelines открывает множество новых возможностей, в том числе:

  • Агрегации: Поддержка новых агрегирующих функций (таких как sum(...) , min(...) и count_distinct(...) ) в сочетании с произвольными полями группировки.
  • Сложная фильтрация: Поддержка более 120 новых функций для выражения произвольно сложных операторов where(...) , включая regex_match(...) , add(...) и str_contains(...) , без жестких требований к индексам.
  • Частичное чтение / Проекции: Извлечение динамических подмножеств документов с помощью select(...) , remove_fields(...) и многих других этапов обработки документов.

Поддержка в режиме реального времени и в автономном режиме.

Для использования режимов Realtime и Offline разработчики могут применять основные операции Firestore Core в версии Firestore Enterprise.

Интеграция клиента и инструментов

В корпоративную версию входят специализированные функции для взаимодействия с запросами конвейера и управления ими:

  • Объяснение и профилирование запросов: Вы можете использовать результаты функции Query Explain, чтобы понять, сколько единиц чтения или записи потребляет запрос, и проанализировать его выполнение.
  • Анализ запросов: В корпоративной версии поддерживается функция анализа запросов, которая помогает определить, где можно создать индексы для повышения производительности и снижения затрат, предоставляя информацию о характеристиках производительности запросов.
  • Новые типы индексов: Вы можете создавать специализированные индексы для версии Enterprise, включая разреженные индексы. Также поддерживается создание и редактирование векторных поисковых индексов для баз данных Enterprise.

Различия между Firestore Standard и Firestore Enterprise

Основное операционное различие между основными и вспомогательными операциями заключается в управлении индексированием, которое напрямую влияет на производительность и затраты.

Firestore Standard - Основные операции Firestore Enterprise — основные и конвейерные операции.
Требования к индексации Для выполнения запросов необходимы индексы.

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

Индексы не являются обязательными и, следовательно, необязательны для выполнения запросов.

Индексы определяются по мере необходимости. Версия Enterprise также поддерживает более широкий спектр типов индексов, включая неразреженные/разреженные и уникальные индексы.

Риск производительности Индексированные запросы: производительность и стоимость зависят от размера результирующего набора данных.

Неиндексированные запросы: производительность и стоимость зависят от размера вашего набора данных.

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

Мы рекомендуем использовать инструменты Query Explain и Query Insights для создания индексов и повышения производительности и снижения стоимости ваших запросов.

Влияние затрат на хранение Вы сталкиваетесь с дополнительными затратами на хранение данных из-за автоматических индексов и составных индексов. Вы экономите на затратах на хранение, поскольку индексы не создаются автоматически для каждого поля.
Базовая себестоимость Оплата взимается за каждую операцию чтения , записи и удаления документа. Оплата взимается за единицу чтения (транши по 4 КБ) и единицу записи (транши по 1 КБ). Запись записей в индекс расходует единицы записи.

Ознакомьтесь с новыми ценами на нескольких примерах .

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