Открыть сервис

Firebase Firestore

Firebase Firestore — это гибкая, масштабируемая облачная NoSQL-документоориентированная база данных, разработанная и поддерживаемая компанией Google (входит в Alphabet Inc.). Она предназначена для хранения, синхронизации и запросов данных в реальном времени для мобильных и веб-приложений. Firestore является частью платформы Firebase, предоставляя разработчикам готовую инфраструктуру для создания серверной части приложений без необходимости управления собственными серверами.

История

Firestore был впервые анонсирован компанией Google в 2017 году на конференции Google I/O. Он стал преемником более ранней базы данных Firebase Realtime Database, которая была запущена в 2012 году. Основной причиной создания Firestore стало желание устранить ограничения Realtime Database, такие как сложность масштабирования, отсутствие поддержки сложных запросов и ограниченная структура данных.

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

Архитектура и модель данных

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

Коллекции и документы

  • Коллекции — это контейнеры для документов. Они не имеют предопределённой схемы и могут содержать любое количество документов. Коллекции не могут содержать другие коллекции напрямую, но документы могут содержать подколлекции.
  • Документы — это основные единицы хранения данных. Каждый документ имеет уникальный идентификатор в рамках своей коллекции. Документы представляют собой JSON-подобные объекты, состоящие из пар «ключ-значение». Значения могут быть различных типов: строки, числа, логические значения, массивы, вложенные объекты, а также специальные типы, такие как ссылки на другие документы и временные метки.

Подколлекции и ссылки

Firestore поддерживает иерархическую структуру данных через подколлекции. Документ может содержать одну или несколько подколлекций, что позволяет моделировать сложные отношения между данными. Например, в коллекции «пользователи» документ пользователя может содержать подколлекцию «заказы» с документами его заказов.

Для связей между документами в разных коллекциях используются ссылки — специальные типы данных, которые хранят путь к другому документу. Это позволяет создавать отношения «один к одному» или «один ко многим» без необходимости вложенных структур.

Ключевые характеристики

Масштабируемость и производительность

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

Синхронизация в реальном времени

Одной из ключевых особенностей Firestore является возможность синхронизации данных в реальном времени. Клиенты могут подписываться на изменения в определённых документах, коллекциях или результатах запросов. При любом изменении данных сервер автоматически отправляет обновления всем подключённым клиентам, что делает Firestore идеальным для приложений, требующих мгновенного обновления интерфейса, таких как чаты, совместное редактирование документов или игровые лидерборды.

Запросы и индексы

Firestore поддерживает мощные запросы, включая фильтрацию по полям, сортировку, ограничение количества результатов и постраничную навигацию. Запросы могут выполняться по нескольким полям, но для этого необходимо создавать составные индексы. Firestore автоматически создаёт индексы для простых запросов, но для сложных запросов разработчику может потребоваться вручную настроить индексы через консоль Firebase или файл конфигурации.

Транзакции и атомарные операции

Firestore поддерживает транзакции, которые позволяют выполнять несколько операций чтения и записи как единое атомарное действие. Если любая из операций в транзакции завершается неудачно, все изменения откатываются. Транзакции могут включать до 500 операций записи и гарантируют изоляцию от других одновременных операций. Кроме того, Firestore поддерживает атомарные операции, такие как инкремент числовых полей или добавление элементов в массив.

Безопасность и правила доступа

Доступ к данным в Firestore контролируется с помощью правил безопасности Firebase. Правила представляют собой декларативный язык, который позволяет определять, кто и при каких условиях может читать или записывать данные. Правила могут проверять аутентификацию пользователя, его роль, а также содержимое запроса. Это позволяет реализовать как простые, так и сложные политики доступа, включая проверку на основе данных, хранящихся в других документах.

Применение

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

  • Мобильные и веб-приложения: Firestore является популярным выбором для создания серверной части приложений на платформах Android, iOS и Web. Он интегрируется с Firebase Authentication для управления пользователями и Firebase Cloud Messaging для отправки push-уведомлений.
  • Игры: Для хранения данных игроков, игровых состояний, лидербордов и достижений.
  • Приложения для совместной работы: Для реализации функций совместного редактирования документов, списков задач или заметок в реальном времени.
  • Чат-приложения: Для хранения сообщений и синхронизации их между пользователями в реальном времени.
  • Интернет вещей (IoT): Для сбора и хранения данных с датчиков и устройств.
  • E-commerce: Для хранения каталогов товаров, корзин покупок и истории заказов.

Ограничения и критика

Несмотря на свои преимущества, Firestore имеет ряд ограничений, которые следует учитывать при выборе базы данных:

  • Стоимость: Firestore использует модель оплаты на основе количества операций чтения, записи и удаления, а также объёма хранимых данных и сетевого трафика. При больших объёмах данных или высокой частоте операций стоимость может быть значительной. В отличие от некоторых других NoSQL-решений, Firestore не предлагает неограниченного бесплатного уровня.
  • Сложность запросов: Несмотря на поддержку сложных запросов, Firestore не поддерживает операции соединения (JOIN) между коллекциями. Для получения связанных данных разработчикам приходится выполнять несколько запросов или денормализовывать данные.
  • Ограничения на запросы: Существуют ограничения на количество полей, по которым можно выполнять фильтрацию и сортировку в одном запросе. Для сложных запросов требуется создание составных индексов, что может усложнить разработку.
  • Скорость записи: В некоторых сценариях с высокой частотой записи, особенно при использовании автоматически генерируемых идентификаторов, Firestore может испытывать проблемы с производительностью из-за «горячих точек» (hotspots) в распределённой системе.

Сравнение с Firebase Realtime Database

Firestore и Realtime Database — это две NoSQL-базы данных в экосистеме Firebase, которые имеют схожие цели, но разные архитектуры и возможности. Основные различия включают:

ХарактеристикаFirebase FirestoreFirebase Realtime Database
Модель данныхДокументоориентированная (коллекции и документы)Древовидная (JSON-дерево)
ЗапросыПоддержка сложных запросов с фильтрацией, сортировкой, ограничениемОграниченные запросы, только фильтрация по одному полю
МасштабированиеАвтоматическое шардирование, высокая масштабируемостьТребует ручного шардирования, ограниченная масштабируемость
СинхронизацияПоддержка подписок на изменения в реальном времениПоддержка подписок на изменения в реальном времени
ТранзакцииПоддержка транзакций с несколькими документамиПоддержка транзакций только на одном узле
ЦенообразованиеНа основе количества операций и объёма данныхНа основе объёма данных и количества подключений

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

Интеграция с Google Cloud Platform

Firestore является частью экосистемы Google Cloud Platform (GCP). Он тесно интегрирован с другими сервисами GCP, такими как:

  • Cloud Functions: Позволяет запускать серверный код в ответ на события в Firestore (например, создание, обновление или удаление документа).
  • Cloud Storage: Для хранения больших файлов, таких как изображения и видео, с возможностью ссылаться на них из документов Firestore.
  • Cloud Run и App Engine: Для размещения серверных приложений, которые взаимодействуют с Firestore.
  • BigQuery: Для анализа данных из Firestore с помощью SQL-запросов.
  • Cloud Scheduler: Для выполнения периодических задач, таких как очистка устаревших данных.

Источники

  • Документация Firebase: Firebase Firestore
  • Официальный блог Google: Introducing Cloud Firestore
  • Документация Google Cloud: Cloud Firestore
  • Firebase Realtime Database vs Cloud Firestore: Comparison Guide

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →