MongoDB / CouchDB用于存储文件+复制?

时间:2012-12-13 21:55:31

标签: mongodb couchdb database nosql

如果我想存储大量文件+复制数据库,那么NoSql数据库对于这类工作最好?

我正在测试MongoDB和CouchDB,这些数据库非常好用且易于使用。如果有可能我会使用其中一个来存储文件。现在我看到Mongo和Couch之间的区别,但我无法解释哪一个更适合存储文件。如果我在谈论存储文件,我的意思是10-50MB的文件,也可能是50-500MB的文件 - 可能还有很多更新。

我在这里找到了一张漂亮的桌子:

enter image description here

http://weblogs.asp.net/britchie/archive/2010/08/17/document-databases-compared-mongodb-couchdb-and-ravendb.aspx

仍然不确定哪些属性最适合文件存储和复制。但也许我应该选择另一个NoSql DB?

3 个答案:

答案 0 :(得分:5)

那张桌子已经过时了:

  • 主 - 从复制已被弃用,有利于初学者的副本集,同时也存在一致性错误。您将需要完全重新阅读MongoDB文档中的此部分。
  • Map / Reduce只是JavaScript,没有其​​他。
  • 我不知道该表的附件意味着什么,但GridFS是内置于驱动程序中的存储标准,有助于更轻松地在MongoDB中存储大型文件。此方法也支持元数据。
  • MongoDB是2.2版本,所以它之前提到的任何版本现在已经过时(即分片和单服务器耐用性)。

我没有使用CouchDBs界面存储文件的个人经验,但如果两者之间几乎没有任何差异,我也不会感到惊讶。我认为这部分对我们来说太主观了,你需要更好地选择哪一套。

实际上可以构建多区域的MongoDB集群(S3存储桶不能并且不能在没有工作的情况下复制),并通过MongoDB将世界特定部分中访问最多的文件复制到这些集群。

我的意思是我有时发现的主要结果是MongoDB可以像S3和Cloudfront一样放在一起,这很好,因为你有冗余存储和分发数据的能力。

然而,说S3是非常有效的选项,我会认真试一试,你可能不会在内容网络中寻找与我相同的东西。

文件的数据库存储并非没有它们的严重缺点,但速度不应该是一个巨大的问题,因为你应该从没有Cloudfront前端S3获得相同的速度,因为你应该从MongoDB获得真正的(记住S3是一个冗余存储网络,而不是CDN)。

如果你要使用S3,那么你会在数据库中存储一行指向该文件并包含有关它的元数据。

答案 1 :(得分:3)

有一个名为CBFS的项目由Dustin Sallings(Couchbase创始人之一,spymemcached的创建者和memcached的核心贡献者)和Marty Schoch使用Couchbase和Go。

这是一个具有冗余和复制功能的 无限节点 文件存储。基本上你自己的S3支持许多不同的硬件和大小。它使用REST HTTP PUT / GET / DELETE等,因此非常易于使用。非常快,非常强大。

Github上的CBFS https://github.com/couchbaselabs/cbfs

协议https://github.com/couchbaselabs/cbfs/wiki/Protocol

博客帖子http://dustin.github.com/2012/09/27/cbfs.html

多样化硬件https://plus.google.com/105229686595945792364/posts/9joBgjEt5PB

其他酷视觉

http://www.youtube.com/watch?v=GiFMVfrNma8

http://www.youtube.com/watch?v=033iKVvrmcQ

如果您有任何疑问,请与我联系,我可以帮您联系。

答案 2 :(得分:2)

您是否考虑过将Amazon S3作为选项?它高度可用,经过验证,具有冗余存储等....

CouchDB虽然我个人非常喜欢它,因为它与node.js配合得很好,但是如果你不想浪费太多的磁盘空间,你需要定期压缩它。在您的情况下,如果您要对相同的文档进行大量更新,那可能是个问题。

我无法真正在MongoDB上提交,因为我还没有使用它,但是如果文件存储是你主要考虑的问题,那么请看看S3和类似的,因为它们完全专注于文件存储。

您可以将存储元数据的两个组合在NoSql或Sql数据存储区中,将实际文件组合在一个单独的文件存储区中,但保持这两个存储区同步和复制可能会很棘手。