【发布时间】:2019-10-01 23:12:03
【问题描述】:
我正在尝试确定在实时数据库或 Cloud Firestore 等直读数据库中引用 Firebase Storage (Google Cloud Storage) 文件的最佳方式。由于对该数据库的读取操作不会受益于可以发出令牌和缓存图像 URL 的后端,因此我不清楚存储这些引用的最佳性能方式是什么。
我提出了一些选择,但没有一个是明显的赢家。
-
将
/images/foo.jpg之类的路径存储到数据库中,并使用Storage Client SDK 生成带有storage.bucket().getDownloadURL("/images/foo.jpg")的标记化路径。优点:安全且简单。
缺点:您要显示的每张图片的网络调用都会严重影响性能。
-
使用超长 TTL 存储像
https://firebasestorage.googleapis.com/v0/b/storage-bucket-823743.appspot.com/o/images%2Ffoo.jpg?alt=media&token=c6da1e33-f3ff-41e2-a6f0-bdb475a2f6d9这样的标记化路径。优点:客户端没有额外的抓取。
缺点:存储在昂贵的 RTDB 中的长字符串。如果该令牌被错误地撤销了怎么办?数据库现已损坏。
-
将
/images/foo.jpg之类的路径存储到数据库并使用公共存储规则。重构为自定义静态 URL,如https://firebasestorage.googleapis.com/v0/b/storage-bucket-823743.appspot.com/o/images%2Ffoo.jpg?alt=media优点:使用小型数据库,无需额外的客户端获取,显式公共访问,不会丢失令牌。
缺点:URL 编码非常不稳定,存储可能会改变它们的 URL 格式,我们会很不走运。
所以,这些是我想出的选项,而且可能还有更多。有关如何解决此问题的任何建议?这个问题是独一无二的,因为 Firebase 数据库没有自定义服务器的优势来处理令牌/缓存层来解决这个问题。
【问题讨论】: