如果我想存储大量文件+复制数据库,那么NoSql数据库对于这类工作最好?
我正在测试MongoDB和CouchDB,这些数据库非常好用且易于使用。如果有可能我会使用其中一个来存储文件。现在我看到Mongo和Couch之间的区别,但我无法解释哪一个更适合存储文件。如果我在谈论存储文件,我的意思是10-50MB的文件,也可能是50-500MB的文件 - 可能还有很多更新。
我在这里找到了一张漂亮的桌子:
仍然不确定哪些属性最适合文件存储和复制。但也许我应该选择另一个NoSql DB?
答案 0 :(得分:5)
那张桌子已经过时了:
我没有使用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数据存储区中,将实际文件组合在一个单独的文件存储区中,但保持这两个存储区同步和复制可能会很棘手。