Получение данных из Firebase RTDB и хранилища

#javascript #web #firebase-realtime-database #firebase-storage

#javascript #веб #firebase-база данных в реальном времени #firebase-хранилище

Вопрос:

Я использую firebase как для хостинга, так и для хранения данных на сайте электронной коммерции. У каждого продукта есть текстовые данные, которые я храню в RTDB, и изображения, которые я храню в хранилище. Прямо сейчас, когда я получаю доступ к продукту на странице профиля, мне нужно сделать два вызова: один в RTDB, а другой в хранилище. Есть ли способ, которым я могу выполнить только один сетевой вызов и получить оба?

Спасибо!

Ответ №1:

Нет. База данных и хранилище используют отдельные API, нет способа получить оба с помощью одного запроса. Я даже не уверен, как это было бы возможно для их реализации.

Однако может быть обходной путь, если вам действительно, действительно нужно сделать все в одном запросе API. Поскольку целые объекты RTDB являются строками, можно кодировать и отображать как строку в кодировке base64 или URI данных и сохранять ее в базе данных таким образом. Затем, когда вы получаете доступ к RTDB, вы должны декодировать строку обратно в изображение. Я считаю, что для каждой записи RTDB существует ограничение в 10 МБ, но это, вероятно, не будет проблемой. Более сложной задачей является перенос всех ваших изображений из хранилища в RTDB и переписывание вашего приложения, чтобы оно выполняло все через RTDB, даже не касаясь хранилища.

Комментарии:

1. Хотя это технически возможно (и фактически было тем, что мы рекомендовали до введения Firebase Storage), я настоятельно рекомендую использовать сетевые издержки двух запросов. Файлы в хранилище легко кэшируются, поэтому часто вам не придется делать два запроса, и гораздо дешевле хранить и обслуживать изображения в хранилище, чем в БД. В зависимости от того, какие данные вы храните, вы также можете сохранить некоторый объем данных в пользовательских метаданных объекта ( firebase.google.com/docs/storage/web/file-metadata )

2. @MikeMcDonald согласился, он должен просто использовать хранилище, если нет действительно веской причины не делать этого.