我应该在CouchDB或S3中存储附件吗?

时间:2012-12-17 17:11:39

标签: amazon-s3 couchdb attachment

我正在编写一个完全围绕文件上传的简单Web API。用户可以通过基于HTTP的API将文件上传到服务,该服务将生成供用户访问的文件,还需要将其与上传的文件一起存储。所以会有很多文件在播放。

基本上,我正在尝试将它们存储在CouchDB中并将它们存储在亚马逊的S3中。

使用CouchDB,我可能会为用户提供一份初始上传文件的文档,其中附件数据内联在_attachments集合中。系统生成的其他文件将添加到该文档中。 (该服务进行文档转换,因此他们上传Excel XLS并且系统生成PDF,TXT等)我认为这样会很好,因为上传的文档记录中的一个删除也将删除生成的PDF,TXT或任何其他附件。

使用S3,我感觉安全,它知道我正在使用完全专用于单个文件存储的托管解决方案。它还专门为这些文件提供带宽,而且它不会来自我的API Web服务器。缺点是它为我的API代码添加了许多额外的逻辑,现在我必须保持许多远程文件与我的本地CouchDB数据库知道它们的同步。此外,如果我希望最终用户直接从S3访问文件,我必须处理请求签名和内容。文档都是单独存储的,因此从CouchDB删除用户上传的附件将要求我对S3的其他文件进行多次删除查询。

我熟悉S3,并在当前项目中使用它,但CouchDB在如何允许附件方面看起来非常棒。我很乐意使用它,但是有任何问题或缺点吗?在我上面描述的场景中,CouchDB附件是否比S3更有意义,并且存储了大量上传的文件?

3 个答案:

答案 0 :(得分:0)

我已经成功地将couchdb用于许多项目和几个类似的项目。你在couchdb的盒子里得到了这么多。我的问题是你的文件的平均大小是多少,你认为你的数据库有多大?

答案 1 :(得分:0)

这两种解决方案都非常明智:有利有弊。

您没有提到将文件存储为CouchDB附件的一个优点是它们将与数据一起复制。它使连续备份更容易,并且在快照中,您的数据将与您的文件保持一致。

答案 2 :(得分:0)

根据我的经验,当涉及大量二进制对象时,数据库引擎会有些不稳定,除非它们专门为此而构建。

我一直在CouchDB中保存(低分辨率)图像,并且遇到了几千兆字节的附件后遇到了麻烦。所以我将附件移到了S3,再也没有回头。