Операции 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 КБ). Запись записей в индекс расходует единицы записи. Ознакомьтесь с новыми ценами на нескольких примерах . |
| Правила безопасности | Правила безопасности защищают коллекции, проверяя права на чтение/запись. | Правила безопасности защищают коллекции, проверяя права на чтение/запись. Узнайте, как моделировать данные для поддержки запросов в конвейере обработки данных, в руководстве по модели данных . |