我正在探索在我们的高负载网站上存储用户上传文件的不同方式(全部是MS Office文档或者类似文件)。 它目前被devise为将文档存储为文件并且具有SQL数据库存储这些文件的所有元数据。 当数量达到数亿的文档时,我担心存储服务器和SQL服务器性能不断增长。 我正在阅读关于CouchDB的很多好消息,包括它的内置可伸缩性和性能,但我不确定如何将文件作为CouchDB中的附件存储在文件系统上的性能方面进行比较。
有人使用CouchDB集群来存储大量的文件和高负载环境?
在回复Redmumba。 CouchDB开发团队会对您所看到的崩溃感兴趣。
最重要的是:CouchDB的整个架构基于失败早期原则。 所有子系统以及主服务器都是在发生错误时立即终止和恢复的。 “崩溃”只是正常操作的一部分,它使更多的可靠软件(具有讽刺意味的是,这是整个Erlang哲学)。
至于这个问题,CouchDB将符合要求。 CouchDB的附件stream非常接近文件系统的速度。 CouchDB文档为您提供元数据和文档附件所需的所有空间,使二进制数据保持密切。 没有必要使用不同的系统。
CouchDB在高负载环境下的体验并不是那么好, 我们已经看到了很多不稳定(频繁崩溃),邮件列表通常表明可以简单地通过安装监视器守护进程来解决,如果它失败重新启动它。 我们不使用大的数值集,但是我们确实频繁地使用它 – 但请记住这一点,因为较大的文件意味着更长的连接时间。 这意味着中间传输将会更加痛苦,这取决于带宽和文件大小。
我build议用GridFS支持来研究MongoDB 。 MongoDB对你来说会很好(基于你的规范),因为你看起来像你有其他的元数据,你可能想要存储在文件旁边; 因为面向文档,您可以将这些元数据与二进制文件一起存储。 为此, GridFS允许您在数据库中存储大文件。
BBC似乎正在使用成功。 我相信有一个关于TED的video,讨论他们在做什么。
我没有使用CouchDB,但我有SQL Server的经验。 如果将文件存储在SQL服务器(varbinary(max)物理存储在文件系统中),我认为你会更好。 它会扩展到数十亿行和性能,而不pipe数据库使用的是什么(oracle,sql server等等),都取决于应用程序的devise和硬件。 我认为这是关键。 性能问题几乎总是由devise不当的应用程序或基础设施造成的,而不是底层的企业级数据库。