关于使用NoSQL DB作为FileStorage的建议,以及Pros&缺点

时间:2012-12-21 18:28:15

标签: c# mongodb gridfs

我们正在评估静态文件存储替代方案的选项(在多个地理位置之间托管)。

  • 我们在Microsoft.NET平台(C#,ASP.NET,WEB API,SQL SERVER)
  • 我们希望在任何NoSQL DB上存储数字资产,主要是BINARY(AI,PSD,JPG,PNG,PDF,XLS,DOC ...)文件。
  • 对于图像文件,它可能包含缩略图(小尺寸)到原始图稿(大文件:范围从300 MB到超过1 GB)。
  • 缩略图会出现在网页上,但原始版本可作为附件提供,可以选择编辑(用户可以下载原稿并使用相应的程序进行编辑并更新版本)。
  • 每个缩略图和原始版本都需要存储多个版本。
  • 我们不会在第三方平台(如Amazon S3,Azure)和CDN上托管这些数字资产。
  • 此数字资产可以基于用户系统配置托管在不同的地理环境中。 (美国用户可以存储美国,欧洲或基于ASIA的服务器/ db)。
  • 需要复制每个存储空间。

我们正在研究MongoDB。有没有人可以建议专业人士和基于上述假设或任何其他替代方案的利弊?

MongoDB的一些研究显示......

  • 磁盘空间消耗是原始数据大小的3倍
  • 可以通过-oplogSize参数减少空间消耗
  • 如果我们尝试读取块和流到浏览器的速度可能比从静态文件存储中读取速度慢6倍。
  • 复制不是双向的,它可以作为主服务器和从服务器使用。

我有原型从静态文件系统读取数字资产并将其存储到默认块中的MongoDB GridFS。将缩略图和原件存储到MongoDB的更好方法是什么?由于缩略图总是小于16MB,但原始可能/不超过16MB,所以默认情况下我应该将所有图像资产存储在GridFS上吗?

我可以设想根据内容类型创建不同的数据库,例如:一个用于PDF,Excel,Word,另一个用于图像。

  • 我们如何在不同的服务器之间复制?
  • 我们如何将它存储在不同地区的不同MongoDB实例中?

我真的很感激任何意见。

谢谢。

1 个答案:

答案 0 :(得分:0)

  

MongoDB的一些研究显示......

     

磁盘空间消耗是原始数据大小的3倍   通过-oplogSize参数减少空间消耗如果我们尝试阅读   块和流到浏览器的速度可能比慢6倍   从静态文件存储中读取它。复制不是双向的   它可以作为主人和奴隶。

您是否曾尝试存储数据或仅在某处找到某些信息?如果您使用数据库(无论哪个)而不是普通文件存储,则始终存在开销。为什么?好吧,你有索引和元信息。

mongodb是一个没有共同强大的一致数据库。因此,您将数据写入一个节点,然后进行复制。但您可以使用WriteConcerns(http://docs.mongodb.org/manual/core/write-operations/#write-concern)等待,以确保您的数据已写入replicaset中的数量,大多数节点等。通过复制,您可以在不停机的情况下进行滚动升级,并且使用分片也可以非常轻松地进行扩展。并使用shard-tags将文档“固定”到特定的分片。见这里:http://www.kchodorow.com/blog/2012/07/25/controlling-collection-distribution/