C# 关于使用NoSQL DB作为文件存储的建议,以及利弊;欺骗
我们正在评估静态文件存储(托管在多个地理位置之间)的替代方案C# 关于使用NoSQL DB作为文件存储的建议,以及利弊;欺骗,c#,mongodb,gridfs,C#,Mongodb,Gridfs,我们正在评估静态文件存储(托管在多个地理位置之间)的替代方案 我们使用的是Microsoft.NET平台(C#、ASP.NET、WEB API、SQL SERVER) 我们希望在任何NoSQL数据库上存储数字资产,主要是二进制文件(AI、PSD、JPG、PNG、PDF、XLS、DOC…) 对于图像文件,它可以包含缩略图(小尺寸)到原始艺术品(大文件:范围从300 MB到超过1 GB) 缩略图将出现在网页上,但原件将作为附件提供,并带有编辑选项(用户可以下载原件并使用相应的程序进行编辑并更新版本
- 我们使用的是Microsoft.NET平台(C#、ASP.NET、WEB API、SQL SERVER)
- 我们希望在任何NoSQL数据库上存储数字资产,主要是二进制文件(AI、PSD、JPG、PNG、PDF、XLS、DOC…)
- 对于图像文件,它可以包含缩略图(小尺寸)到原始艺术品(大文件:范围从300 MB到超过1 GB)
- 缩略图将出现在网页上,但原件将作为附件提供,并带有编辑选项(用户可以下载原件并使用相应的程序进行编辑并更新版本)
- 每个缩略图和原件都需要存储多个版本
- 我们不会在第三方平台(如AmazonS3、Azure)和CDN上托管这些数字资产
- 根据用户系统配置,此数字资产可以托管在不同的地理环境中。(美国用户可以存储美国、欧洲或亚洲的服务器/db)
- 每个存储都需要复制
- 磁盘空间消耗是原始数据大小的3倍
- 可以通过-oplogSize参数减少空间消耗
- 如果我们尝试将块和流读取到浏览器,速度可能比从静态文件存储读取慢6倍
- 复制不是双向的,它可以作为主复制和从复制
- 我们如何在不同的服务器之间进行复制
- 如何将其存储在不同地区的不同MongoDB实例中
mongodb是一个无共享的强一致性数据库。因此,将数据写入一个节点,然后进行复制。但您可以使用WriteConcerns()等待,因此请确保您的数据已写入复制集中的多个、多数等节点。通过复制,您可以在不停机的情况下进行滚动升级,而且使用分片进行扩展也非常容易。并使用碎片标签将文档“固定”到特定碎片。请参见此处:您的要求是什么?除了NoSQL解决方案之外,您是否调查过SQL Server 2008(及更新版本)FILESTREAM的使用?为什么要将文件本身存储在数据库中?为什么不将文件存储在S3上并存储到数据库的路径?有什么特别的原因吗?将文件存储在数据中的问题之一是,它使操作变得困难,即:动态调整大小、压缩文件。@Lucero感谢您的回复。我们将使用HttpHandler或Web API将缩略图从MongoDB流式传输到基于Web的应用程序。因此,它应该随时可用。我们确实使用SQLServer2008R2,但尚未评估是否将其存储为BLOB。在我们有数千张图片的地方,它是如何放大的?此外,我们不会将同一台服务器用作数据库和数字资产,因此我们必须获得多个sql server许可证,这可能会增加成本。@DarthVader感谢您的回复。所有的数据库和文件服务器都需要托管在客户端环境中。这就是为什么S3不是一个选项。@user1810385,它的伸缩性非常好,这似乎非常适合FILESTREAM的设计。然后,所有数据都存储在文件系统中,它的扩展性与文件系统一样好(通常是NTFS,但也支持SAN),这对于许多文件来说都非常好。它还支持SQL Server复制。看一看。