我正在编写一个完全围绕文件上传的简单 Web API。用户可以通过基于 HTTP 的 API 将文件上传到服务,服务将生成文件供用户访问,并且还需要将它们与上传的文件一起存储。所以会有很多文件在玩。
基本上,我试图在将这些存储在 CouchDB 中和将它们存储在类似 Amazon 的 S3 中之间做出决定。
使用 CouchDB,我可能会为用户上传的初始文件提供一个文档,其中附件数据内联在 _attachments 集合中。系统制作的其他文件将添加到该文档中。(服务做文档转换,所以他们上传Excel XLS,系统生成PDF、TXT等。)我觉得这样很好,因为上传的文档记录一次删除也会删除生成的PDF、TXT或任何其他附件。
使用 S3,我知道我正在使用完全专用于单个文件存储的托管解决方案,我感到很安全。它还将带宽专门用于这些文件,并且不会来自我的 API Web 服务器。缺点是它为我的 API 代码添加了很多额外的逻辑,现在我必须让很多远程文件与我的本地 CouchDB 数据库所知道的内容保持同步。此外,如果我希望最终用户直接从 S3 访问文件,我将不得不处理请求签名等问题。文档都是单独存储的,因此从 CouchDB 中删除用户上传的附件将需要我对 S3 进行多次删除查询以获取其他文件。
我熟悉 S3,并在当前项目中使用它,但 CouchDB 在允许附件方面看起来非常棒。我很想使用它,但有什么问题或缺点吗?在我上面描述的场景中,CouchDB 附件是否比 S3 更有意义,存储了大量上传的文件?