#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 согласился, он должен просто использовать хранилище, если нет действительно веской причины не делать этого.