Какую ссылку Firebase Storage следует сохранить в RTDB / Firestore? - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь определить наилучший способ ссылки на файл Firebase Storage (Google Cloud Storage) в базе данных с прямым чтением, такой как База данных реального времени или Cloud Firestore. Поскольку операция чтения в этой базе данных не имеет преимущества от бэкэнда, который может выдавать токены и кэшировать URL-адреса изображений, мне не ясно, как наиболее эффективно хранить эти ссылки.

Я придумалнесколько опций, и ни один из них не является явным победителем.

  1. Сохраните путь, например /images/foo.jpg, к базе данных и используйте Storage Client SDK для создания токенизированного пути с storage.bucket().getDownloadURL("/images/foo.jpg").

    Плюсы : Безопасный и простой.

    Минусы : сетевой вызов для каждого отдельного изображения, которое вы хотите отобразить, значительно снижает производительность.

  2. Сохраняйте токенизированный путь, например https://firebasestorage.googleapis.com/v0/b/storage-bucket-823743.appspot.com/o/images%2Ffoo.jpg?alt=media&token=c6da1e33-f3ff-41e2-a6f0-bdb475a2f6d9, с помощьюсверхдлинный TTL.

    Pros : дополнительная загрузка на клиенте отсутствует.

    Минусы : длинная строка хранится в дорогой RTDB. Что если этот токен будет отозван по ошибке? База данных теперь повреждена.

  3. Сохраните путь типа /images/foo.jpg к базе данных и используйте правила общего хранения. Реконструкция в пользовательский статический URL-адрес, такой как https://firebasestorage.googleapis.com/v0/b/storage-bucket-823743.appspot.com/o/images%2Ffoo.jpg?alt=media

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

    Минусы : кодирование URL является очень ненадежным, хранилище может изменить их формат URL, и нам не повезет.

Итак, этиварианты, которые я придумала, и может быть больше. Любые предложения о том, как решить эту проблему? Проблема уникальна, потому что базы данных Firebase не имеют возможности настраиваемого сервера для обработки слоя токенов / кэширования для решения этой проблемы.

1 Ответ

1 голос
/ 02 октября 2019

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

Я обычно использую:

  1. Если мне нужен доступ к файлам длячтобы обеспечить безопасность, я сохраняю путь к изображению (как в вашем # 1), а затем использую Firebase SDK для доступа к файлу.
  2. Если мне не нужен доступ к защищаемым файлам, я сохраняюпуть к изображению и URL для загрузки. Таким образом, я могу легко найти изображение на основе пути и использовать URL-адрес загрузки в незащищенных клиентах.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...