Каков наилучший способ изменить модель данных Firebase
, когда у вас есть несколько версий вашего приложения iOS?
Поскольку в среде нет слоя "сервер приложений", любые изменения в модели базы данных могут привести к повреждению более старых версий приложения.
Связанный с производительностью пример проблемы:
В версии 1.0 я наивно сохранял все, что связано с сообщением в разделе "/posts/". Теперь в версии 2.0 я хочу принять рекомендацию Firebase и добавить конечную точку "/user-post", чтобы быстро перечислить все сообщения для данного пользователя.
Люди, использующие версию 1.0 приложения iOS, не записывают никаких данных в "/user-posts", поскольку эта конечная точка не использовалась. Поэтому люди, использующие версию 2.0, не видят сообщений, созданных людьми, использующими старую версию приложения.
В теории я мог бы создать сервер где-нибудь, который слушает изменения в '/post/' и добавляет их к '/user-posts'. Со временем это сложно поддерживать, хотя, если у вас много разных версий вашего приложения.
Новая функция Пример проблемы:
Предположим, что в версии 1.0 вашего мобильного приложения вы пишете новые сообщения в блоге на '/posts/'. Теперь в версии 2.0 вашего приложения вы вводите функцию "Команды", и все сообщения должны быть в "/team/team-id/posts".
Люди, не обновленные до версии 2.0, все равно будут писать в "/posts". Эти сообщения не будут видны людям, использующим версию 2.0, которые читают "/team/team-id/posts".
Я понимаю, что вы могли одновременно поддерживать обе конечные точки (и индексы/сообщения на основе идентификатора команды), но со временем это, похоже, сложно поддерживать.
Традиционные решения:
Если бы я использовал что-то вроде Django или Express, я бы делал миграцию базы данных, а затем обновлял конечные точки на стороне сервера для создания блогов.
Это приведет к изменениям в базе данных от клиентов. Я мог бы теоретически добавить уровень приложения-сервера в мою архитектуру с помощью Firebase
, но это не похоже на то, что рекомендуется: https://firebase.googleblog.com/2013/03/where-does-firebase-fit-in-your-app.html