在文件服务器或数据库中存储文件?

时间:2011-08-17 09:46:33

标签: c# asp.net sql-server sql-server-2008 ms-word

我正在ASP.Net中开发一些Web应用程序,主要是关于存储,共享和处理MS Word文档和PDF文件,但我不知道如何管理这些文档,我想将文档保存在文件夹中并且只保留它们在DB中的元数据或将整个文档保存在DB中,我正在使用SQL Server 2008.你的建议是什么?

6 个答案:

答案 0 :(得分:3)

SQL Server 2008在存储和提供大型文档方面相当不错(与早期版本不同),因此它绝对是一种选择。也就是说,从数据库中提供大量blob通常不是一个好主意。我认为你需要考虑两种方法的优缺点。一些需要考虑的一般事项:

  • 文件的大小,以及有多少文件?扩展文件系统超过许多TB比在数据库中执行相同操作要容易得多。
  • 您想如何管理备份?显然,使用文件系统方法,您需要单独从数据库备份文件。

我认为实现存储到数据库的解决方案可能更快,但存储到文件系统通常是更好的解决方案。但是,在后一种情况下,您将不得不担心一些问题,例如具有唯一的文件名,并且通常不希望在单个文件夹中存储太多文档(大多数解决方案在每几千个文档之后创建新文件夹)。如果文件数量不会很多,请使用更快的方法,否则需要花一些时间存储在文件系统上。

答案 1 :(得分:3)

在数据库中,除非您不关心关于数据完整性。

如果您将文档存储在数据库之外,那么缺少文档,并且不会在以后删除链接。您的备份/还原方案要复杂得多:您无法确保所有数据都来自同一时间点。

SQL Server 2008中的FILESTREAM现在使其高效(而其他RDBMS也具有这样的功能)

答案 2 :(得分:0)

如果将这些文件存储在一个文件夹中,则在数据库中维护文件名。由于没有dir可以有2个相同扩展名的文件名。如果您希望将文件存储到DB中,则可能必须使用BLOB或字节数组来存储。

我在打开与DB的连接时看到了头脑,但我不知道数据库连接与file.Open相比有多快(甚至性能明显)。

答案 3 :(得分:0)

如果文件相对较小,我会将它们存储为数据库中的BLOB字段。这样,您可以使用标准过程进行备份/恢复以及事务处理。如果文件很大,那么将它们保存在硬盘驱动器上并将文件名存储在数据库中有一些优点,如前面所建议的那样

答案 4 :(得分:0)

如果您要对该文件进行操作,我会认为将 DB 存储为BLOB数据。如果你有文件夹上的文件和DB中只有名字,你应该关心的事实,例如:

1)有一天你可能需要重命名文件

2)改变其位置

3)更改其扩展名

或其他什么。

如果是 DB ,您可以将其保存在单独的表BLOB数据中,保存在其他表名称扩展名中该文件及其BLOB表上的 ID 。在这种情况下,在前面讨论过的场景中,您只需要执行简单的 SQL 更新查询。

答案 5 :(得分:0)

您打算存储多少份文件?

数据库方法的主要优点是普通ACID属性 - 元数据始终与文档一致,如果使用文件系统存储文档,则不会出现这种情况。使用文件系统,您的元数据和文档可能相对容易失去同步:文件系统上没有元数据的文档,文档丢失或损坏的元数据。如果您的文档存储需要任何可靠性,那么数据库是比使用文件系统更好的方法。