2016-01-31 39 views
1

我们正在一个教育网站,该网站允许用户(教师和学生)上传文件(.PDF,.DOCX,png格式和...)工作MVC.NET。我们在这方面没有任何经验,并希望能够正确地存储和索引这些文件,我们希望有一个能够很好地适应大容量数据的体系结构。
目前我们店的路径,我们的文件在数据库中像下面(Nvarchar(MAX)):存储用户上传的文件上使用IIS web服务器

~/Files/UserPhotos/2fd7199b-a491-433d-acf9-56ce54b6b14f_168467team-03.png 

,我们使用下面的代码保存和检索文件:

//save: 
file.SaveAs(Server.MapPath("~/Files/UserPhotos/") + fileName);  
//retrieve: 
<img alt="" src="@Url.Content(Model.FilePath)"> 

现在我们的问题是:

  1. 是我们在以正确的方式?
  2. 我们应该将文件保存在根目录中吗?或虚拟目录?
  3. 想象我们的服务器有1倍TB的存储空间,存储1点TB的数据,如果我们添加一个额外的硬盘驱动器,我们应该如何管理变更后?

我们搜索了很多,但没有找到正确的架构的任何好的教程或指导。
对不起我的英文不好。

+1

您可能想考虑某种“云”存储,如[Amazon S3](https://aws.amazon.com/s3/)或[Azure Blob存储](https://azure.microsoft.com/zh-cn/ -gb /服务/存储/斑点/)。这些脚本足够简单,可以集成到MVC应用程序中,并具有附加的好处,即如果您的网站有多个托管在不同服务器上的实例,则所有实例都可以访问共享存储。 –

+1

由于@darth_phoenixx提到像azure这样的云服务,亚马逊将成为比本地存储更好,更具可扩展性的解决方案。如果你重新考虑教师和学生将要上传大量文件(重的文件),那么你也可以考虑将此任务卸载到单独的上传服务/队列中,这样可以减轻应用服务器的负担。 –

+0

@darth_phoenixx我的国家无法访问Azure Blob存储... – Oli

回答

0

1.I通常以这种方式保存文件:

file.SaveAs(Server.MapPath("/Files/UserPhotos/") + fileName); 

2.it是更好地保存在一个虚拟目录,这样就可以将你的文件的文件夹到一个新的额外的硬盘当您在此文件夹中有太多文件时,请在IIS中更改虚拟目录的路径。

1

在理想的世界中,您将使用云存储,如Azure Blob存储,如果这不是一种选择,那么我会这样做的方式是创建专门处理上传文件和文件存储的单独Web服务。

通过创建一个单独的Web服务来管理文件存储,您将隔离您的顾虑,该服务可以监视硬盘存储空间,并在文件上传时将其平衡,并在将来添加额外的服务器。 。你已经分开了你的服务,所以它不会像以前那样混乱。

您可以在SQL数据存储索引一切,因为文件被上传。您的问题实际上比我刚才提到的,虽然复杂得多......

需要注意的是游戏策划是否或何时将硬盘驱动器的一个去过时了其他问题!没有硬盘的RAID 1配置,您的可用性会直线下降到NADA。

队列发行数量2 ...可用性!=备份......你需要考虑你打算如何备份系统启动你的游戏计划,多久,在什么时间,等...更你拥有的数据越难......

这就是为什么每个人都转移到Azure/AWS等......你就不必担心这些事情了......

+0

我的国家无法访问Azure Blob存储.... – Oli

+0

您的意思是您的国家没有数据中心吗? –

+0

不,我住在伊朗,因为对我们国家的制裁我们无法使用这些服务:) – Oli

相关问题