Asp.net core mvc 使用asp.net MVC core+EF core+加密文件的功能时。Blob、FileStream和文件系统在管理文件方面有什么区别

Asp.net core mvc 使用asp.net MVC core+EF core+加密文件的功能时。Blob、FileStream和文件系统在管理文件方面有什么区别,asp.net-core-mvc,filesystems,entity-framework-core,blob,filestream,Asp.net Core Mvc,Filesystems,Entity Framework Core,Blob,Filestream,我正在开发一个asp.net核心mvc web应用程序,该web应用程序是一个文档管理工作流。在每个工作流步骤中,用户可以上载文档,如下所示:- 用户可以上传具有以下限制的文档;文件不能超过5MB+工作流中的所有文档不能超过50MB,除非管理员批准。他们可以上传任意数量的文档。 我们将有很多视图,这些视图将显示步骤及其附带的所有文档,用户可以选择下载这些文档。 我们可以有无限数量的工作流。随着越来越多的用户注册我们的应用程序,将创建更多的工作流。 某些文件可以标记为机密文件,因此在将其存储在数据

我正在开发一个asp.net核心mvc web应用程序,该web应用程序是一个文档管理工作流。在每个工作流步骤中,用户可以上载文档,如下所示:-

用户可以上传具有以下限制的文档;文件不能超过5MB+工作流中的所有文档不能超过50MB,除非管理员批准。他们可以上传任意数量的文档。 我们将有很多视图,这些视图将显示步骤及其附带的所有文档,用户可以选择下载这些文档。 我们可以有无限数量的工作流。随着越来越多的用户注册我们的应用程序,将创建更多的工作流。 某些文件可以标记为机密文件,因此在将其存储在数据库或文件系统中时,应该对其进行加密。 我们计划使用EF core作为我们的web应用程序+SQL server 2016或2017的数据访问层。 现在我的问题是我们应该如何管理我们的文件,我发现了这三种方法

斑点。 文件流 文件系统。 现在,第一种方法将允许我们加密数据库中的文件+将使用EF。但它在性能上有一个巨大的缺点,因为打开文件或从数据库查询文件意味着它们将被加载到宿主服务器内存中。因为我们正在寻求一种可扩展的方法,所以我认为这种方法不适合我们,因为它的可扩展性较差

第二种方法。与第一种方法Blob相比,将具有更好的性能,但EF+不支持FileStream,并且不允许加密。所以我们也必须排除这个

第三种方法。将文件存储在具有工作流ID的文件夹中+将指向文件/文件夹的链接存储在数据库中。将允许我们加密文件+将与EF合作。与Blob相比,它具有更好的性能不确定这是否适用于FileStream。唯一的缺点是,我们无法实现数据库中的文件及其相关记录之间的原子性。但是通过添加一些代码,我们可以自己处理这个问题。例如,删除数据库记录将删除文件夹中的所有文档,我们可以添加一些后台作业,以确保所有文档都有数据库记录,或者删除文档


因此,基于上述情况,我发现第三种方法最适合我们的需要?有人能给我一些建议吗?我的假设正确吗?是否有第四种方法或混合方法更适合我们?

尽管现代RDBMS已针对数据存储进行了优化,具有完整性和原子性的优点,数据库应被视为最不可替代的StackOverflow Post,并应证实上述内容,因此,第三个选项或其改进应为投票

例如,一个潜在的改进是将重命名为内容和数据库哈希的文件存储在哈希中,该哈希将消除操作系统对文件名和路径的所有限制。此外,使用结构良好的目录布局,可以过滤掉重复的目录


应帮助实现原子性,这将消除背景工作的需要。可以找到一本关于UDF的优秀指南,特别是关于访问文件系统和调用可执行文件的指南。

如果没有赏金,他的问题将以主要基于意见的方式结束。@GertArnold好的,谢谢你的注释,但我认为我的问题没有那么广泛或基于意见,当我询问考虑到许多因素的最佳方法时。。。现在如果有人问一个关于文件管理的问题,我会把它看作是一个基于意见的,但是,在我的例子中,有很多因素我问他们,什么是最好的评价……你完全忽略了FiestReAM,我认为这是非Azure SQL Server数据库的最佳选择。你可能不同意,好吧,但你至少应该讨论一下,因为这是一种选择。@Ashen Gunaratne好的,谢谢你的回答,所以你认为使用文件系统存储文件是最合适的选择?@GertArnold是的,我也认为FileStream是最好的选择,但由于我使用的是EF core+,我需要加密某些文件作为第二级安全性,因此我发现filestream不是最好的选择,似乎fileStream的文件无法加密+EF core不支持fileStream..@GertArnold fileStream确实具有很强的候选资格,但正如测试所指出的,对于当前场景,这将是一个非常好的选择@testtest是的,在我看来,考虑到所有方面,这将是最明智的选择!