04 октября 2017

Google Cloud Firestore - новая облачная СУБД для мобильных и Web приложений


Google представил публике новую облачную СУБД реального времени для мобильных и Web приложений, которая дополнила его великолепную линейку по середине.

Зачем Google выпустил ещё одную оСУБД?

Общее количество облачных СУБД от Google давно уже превысило количество СУБД от Microsoft и Oracle вместе взятых и, вот, снова Google нас радует ещё одной облачной СУБД с замечательными характеристиками для мобильных и Web приложений.

Казалось бы, Google и так абсолютный лидер рынка СУБД для мобильных приложений, где доминирует его СУБД Firebase Realtime Database за счёт своего удобства для Android и Web разработчиков (обмен данными в формате JSON), возможности работы оффлайн и фоновой синхронизацией с облаком без участия программиста. За счёт этого даже фанаты iPhone хранят большинство своих бизнес данных из мобильных приложений не в Apple, а в Google, так как приложения на iOS, имеющие пару на Android, используют общую СУБД, чтобы пользователь мог работать с приложением с любого устройства.

Тем не менее, Google решил не останавливаться на достигнутом и разработал новую СУБД для мобильных и Web приложений, которая пытается предоставить программисту наиболее значимые функции из двух миров (иерархического и реляционного) по приемлемой цене.


В чём отличие Firebase Realtime Database от Cloud Firestore?

Данные в Firebase Realtime Database храняться полностью в одном JSON объекте, поэтому если вам необходимо прочитать (загрузить на клиента) лишь один лист дерева, то вы обязаны прочитать и всё, что с ним связано тоже. В тоже время, объекты Cloud Firestore, хоть и представляют собой похожую древовидную структуру, но листья в нём не являются частью общего JSON, а лишь JSON-подобными документами, тело которых не читается при запросе и не передаётся на клиент, если не является прямым результатом запроса. Это, в свою очередь, позволяет создавать очень большие листья, хранящие не только текстовые строки но BLOB с картинками, видео, звуком и т.п.

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


В отличие от Firebase Realtime Database данные Cloud Firestore можно хранить в неограниченном числе зон по всему миру, что делает ваше приложение поистине глобальным. При этом, фиксация транзакций и синхронизация изменений со всеми клиентами выполняется прозрачно, почти как в самой топовой СУБД Google Cloud Spanner, что не удивительно, т.к. они построены на схожей инфраструктуре Google Cloud Platform.

Выбор облачной СУБД от Google

Теперь для построения мобильных или Web приложений мы имеем от Google чёткую линейку, которая увеличивает свою функциональность "от простого к сложному":
1) Firebase Realtime Database
2) Cloud Firestore
3) Cloud SQL
4) Cloud Spanner

Казалось бы, надо всегда выбирать для нового приложения Google Cloud Spanner, который может выдержать любую нагрузку и ответит на самый сложный запрос быстрее всех. Однако, не всё так просто, как выглядит на первый взгляд, и, возможно, не стоит сразу "бить из пушки по воробьям".

Google очень тщательно выставил цены на использование ресурсов СУБД таким образом, что если вы пользуетесь только основными преимуществами Firebase Realtime Database, т.е. для whiteboard и чат-приложений, то заплатите меньше, чем за Cloud Firestore, который в свою очередь выйдет вам гораздо дешевле для приложений инвентаризации и видео-каталога, чем тот же Cloud SQL, а уж он в свою очередь идеально походит для Интернет магазина. 

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

В общем, если вы планируете большую нагрузку, то вполне имеет смысл сделать пару простых прототипов вашего приложения на разных СУБД и на реальном профиле трафика решить, какая СУБД вам больше подходит по деньгам, ибо в зависимости от типа приложения цена может варьироваться на порядки.

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