Firebase запустил новую базу Cloud Firestore

902
views

Firebase запустил новую базу Cloud Firestore

Свершилось! Firebase нас услышали и в октябре запустили в бета режиме новую базу данных Cloud Firestore. По-прежнему с реалтайм обновлением, но с улучшенными возможностями сохранения и получения данных. Да, теперь мы сможем сделать выборку по двум различным параметрам запроса! Подробнее про отличия с существующей базой и какую из них выбрать мы рассмотрим далее.

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

Улучшенные параметры запроса и структура хранения данных

В то время, когда Firebase Realtime Database по сути представляет из себя JSON файл, Cloud Firestore является более структурированной альтернативой. Cloud Firestore — это база типа document-model. Это означает, что все ваши данные хранятся в объектах, называемых документами, в виде ключ-значение. Где значение может быть чем угодно, от строковой переменной до бинарного файла.Такие документы группируются в коллекции.Коллекции в Cloud Firestore

Ваш Cloud Firestore, будет содержать одну или несколько коллекций с документами, которые будут ссылаться на другие «субколлекции» со своими документами и так далее.Структура Cloud Firestore

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

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

Выборка из Cloud Firestore
В этом примере документ вверху может быть извлечен без захвата каких-либо документов в нижестоящих субколлекциях.

Во-вторых, Cloud Firestore имеет гораздо больше возможностей строить запросы к базе чем Realtime Database. В Realtime Database для фильтрации данных по нескольким полям приходилось либо реально извращаться над структурой данных, либо тянуть лишние данные и фильтровать их на клиенте.

Пример Realtime Database
Города в Realtime Database

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

 

 

В Realtime Database вам приходилось создавать дополнительные поля, в которых бы были объединены несколько свойств, специально для такого запроса.

Дополнительно поле штат_популяция лишь для запроса

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

База в лайве будет отдавать вам данные с заданными параметрами.

Cloud Firestore создан для масштабирования

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

Cloud Firestore разработан по лучшим канонам Google Cloud. Что позволяет ему гораздо проще и эффективней масштабироваться чем Realtime Database.

Новая система запросов Cloud Firestore позволит найти 10 лучших ресторанов в Чикаго одинаково быстро, будь у вас в базе 300, 300 тысяч или 30 миллионов ресторанов. На презентации один из инженеров сказал «В Cloud Firestore просто невозможно сделать малопроизводительный запрос».

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

Простая выборка данных

Часто разработчикам необходимо лишь разово получить из базы данные и при этом не создавать подключение для реалтаймовых обновлений. В Realtime Database это можно было реализовать с помощью вызова .once, но выглядело это ненатурально.

В новой базе простая выборка выглядит значительно элегантней и задумана как основной способ получения данных.

Cloud Firestore находится в множесте регионов

Cloud Firestore является мульти-региональной базой. И дублирует данные в различные географические сегменты. Это позволяет максимально быстро обрабатывать запросы пользователей в любой точке мира.

Принципиально разные модели монетизации

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

В то время как Cloud Firestore взимает плату за эти вещи, они значительно ниже, чем в Realtime Database. Вместо этого, цена Cloud Firestore в основном определяется количеством запросов на чтение и запись данных.

Это означает, что если у вас есть более традиционное мобильное приложение, в котором ваш клиент иногда запрашивает большие фрагменты данных из вашей базы, например, что-то вроде новостного приложения, вы обнаружите, что ценовая модель Cloud Firestore может быть более благоприятной, чем если бы вы использовали одно и то же приложение с Realtime Database.

С другой стороны, если у вас есть приложение, которое делает очень большое количество запросов в секунду на каждого клиента (например, приложение для групповой доски, где вы можете транслировать все обновления для каждого пользователя несколько раз в секунду), Cloud Firestore, вероятно, будет дороже. По крайней мере, вы всегда можете использовать обе базы вместе.

Так что же использовать?!

Разработчики firebase рекомендуют, чтобы большинство новых приложений стартовали с Cloud Firestore, если конечно вы не считаете, что ваше приложение имеет уникальные потребности (как те, которые были упомянуты выше), то для него больше подойдет Realtime Database.

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

P.S. Хочу заметить, что волшебной палочки, которая бы конвертировала существующую базу в Cloud Firestore  нет и скорее всего не будет. Так как структуры хранения данных у всех разные, а следовательно способы миграции тоже. И команда firebase ясно дала понять, что мигрировать на новую базу нужно осознано.

Подписывайтесь

Для получения уведомлений о новых публикациях — подписывайтесь на мой блог или страницы в соц. сетях: Twitter, Facebook.

Подписаться на блог по эл. почте