我应该将图片上传到 Cloud Firestore 还是 Firebase Storage?
Posted
技术标签:
【中文标题】我应该将图片上传到 Cloud Firestore 还是 Firebase Storage?【英文标题】:Should I upload images to Cloud Firestore or Firebase Storage? 【发布时间】:2019-11-11 19:17:46 【问题描述】:可能是个愚蠢的问题,但需要像我这样的初学者弄清楚。
我知道如何在 Firestore 数据库上上传图片,但我想,为什么我们不使用 base64 字符串来上传图片,而不是使用 FirebaseStorage
,这可能很容易?还是对字符串长度有限制?
~ PS:我还没有尝试使用 base64 字符串将图像上传到 Firestore。
【问题讨论】:
【参考方案1】:Cloud Firestore "Usage and limits" documentation 声明“文档的最大大小”为1 MiB (1,048,576 bytes)
。
这是图像的少量数据,仅允许将低分辨率图像存储在单个文档中。作为一种解决方法,您可以将图像存储在多个文档中,但这会变得不必要地复杂,而 Firebase 存储 完美地解决了这个问题。
此外,在收听文档中的任何更改时,您将下载整个图像(整个文档)。如果您有一个包含image (base64 string)
和likes (int count)
字段的文档,并且您尝试侦听likes
的实时更新,那么您将在每次客户端下载完整图像。
Firebase Storage 因此很可能是您要搜索的内容,因为您可以存储任何大小(与您的容量一样大)的对象,它为您提供下载 URL,而您没有处理任何编码或解码(尽管Cloud Firestore allows blob's,也就是字节数据)。
【讨论】:
【参考方案2】:在 Firestore 上存储文件(作为二进制数据)而不是 Firebase 存储没有任何好处。
Firestore 主要针对读写和删除进行计费,每月免费存储仅为 1 GB !!!如果做得不好,这可能是一个严重的陷阱。阅读How we spent 30k USD in Firebase in less than 72 hours。
Firebase 存储是迄今为止存储文件的最佳选择,几乎没有文件大小限制且价格便宜得多,然后只需将文件 url 保存到 Firestore 即可。
【讨论】:
您还忽略了一个重点:存储在 Firebase 存储中的文件可以使用 URL 访问 - 不需要序列化/反序列化代码。【参考方案3】:从技术角度来看,是的,您始终可以存储 (base64) 字符串并在以后使用它来检索图像。但是,base64 字符串比字节数据高出 30%。因此,如果您使用 base64,您将失去性能和存储空间。
其次,使用 FirebaseStorage 有另一个优势。就是在手机app在后台的时候上传图片。作为开发人员,我们不必为此编写任何特定代码。
@creativecreatorormaybenot 已经指出了 Cloud Firestore 和 Firebase 存储的限制。
我的结论:比起 base64,我更喜欢 Firebase 存储。
【讨论】:
以上是关于我应该将图片上传到 Cloud Firestore 还是 Firebase Storage?的主要内容,如果未能解决你的问题,请参考以下文章