存储word文档

时间:2009-02-19 02:04:02

标签: asp.net

我正在使用工作网站(使用asp.net 3.5),用户可以上传一份或多份简历。 数据库是sql server 2005。 关于存储这些文件的建议是什么? 我应该将它作为blob存储在数据库中,还是只将路径存储在数据库中并将文档保存在物理文件夹中? 有人可以提一下各种性能和可扩展性的优缺点吗?

谢谢!

8 个答案:

答案 0 :(得分:1)

在数据库中存储文件可以:

(+)更容易管家,磁盘上没有孤立的文件

(+)一致的编程和访问模型(授权)

( - )数据库过度增长,这将增加备份时间和磁盘空间用于保存备份文件

我认为这两种选择都不比另一种更好。如果您期望非常大量的文档,您将达到目录中文件数量的限制(作为绝对限制,或者因为目录查找在某个点开始执行得非常差)。

答案 1 :(得分:0)

将数据保存在数据库中将使管理日期变得更加容易。您不必确保数据库中的数据与文件系统上的数据(文件路径)同步。

话虽如此,重要的是要意识到在数据库中存储大blob时可能会遇到性能损失。幸运的是,在这方面已经进行了一些研究以调查可能的情况。我建议你看看微软研究院关于这个主题的this paper。希望有所帮助。

此外,我应该提到Microsoft SharePoint将其Word文档(以及其他文件)作为blob存储在SQL Server数据库中。您可以阅读有关此here的更多信息。

答案 2 :(得分:0)

没有什么可以说你不能同时做到这两点 - 解析文档&将重要的元信息(例如联系信息,常用单词等)存储到索引列中,存储文档的路径。这就是我为高可用性(每月最多21万次展示)数据库所做的工作,但我们提供的是媒体文件,但文件大小和校长差不多。

答案 3 :(得分:0)

您可以尝试将文档文件存储在单独的数据库中,并使用简单恢复模型。然后,您可以轻松备份文档数据库,而无需担心备份的大小不断膨胀。

答案 4 :(得分:0)

我有两个系统将文件存储在文件夹中 - 当我们在文件夹中获得大约20K文件时,这两个系统都缩放得很差。可以通过使用子文件夹(例如2008-01,2008-02)来解决,但正如其他人所说,你有同步问题。

数据库允许您存档/删除旧的简历并且没有同步问题。只要您不想全文搜索数据,就可以在存储/检索时压缩/解压缩文本。假设一个10-20K的文件,你可以压缩到1-2K。没那么大。

答案 5 :(得分:0)

我负责管理许多TB图像的应用程序。我认为这个应用程序类似,因为它存储的文件比典型的数据库行大。我们发现在数据库中存储文件路径是最好的。

有几个问题:

  • 数据库存储通常比文件系统存储更昂贵。
  • 您可以使用标准的现成产品加速/分发文件系统访问权。
  • 诸如Web服务器之类的东西,不需要特殊的编码或处理来访问文件系统中的图像。

答案 6 :(得分:0)

我建议将其存储在数据库中以保持一致。

在数据库中存储时需要考虑的另一点是SQL数据库可以由多个文件组成。我建议的是在这个包含BLOB数据的表的数据库上创建第二个文件(.ndf)。

这提供了一些关键的好处,因为它可以(1)在需要增加需求的情况下在单独的磁盘阵列上运行。 (2)可以单独备份和恢复。 (3)不会膨胀你的主要OLTP数据库文件。

答案 7 :(得分:0)

我会为每项工作使用最好的工具:

  • 用于存储和查询数据的最佳数据库类型是关系数据库。
  • 管理文件的最佳数据库是文件系统。

使用文件系统将允许您使用正确的工具来管理文件:您可以使用操作系统的压缩功能,使用增量备份工具等,而不会使用可能包含大图像的构造不良的Word文档来破坏您的数据库。 / p>

随着文件数量的增加,从文件系统的角度来看,问题很容易解决:将文件存储到相对路径目录中,这样就可以控制每个目录的文件数量(例如,创建每周文件夹或当文件计数超过一定限制时创建新文件夹。) 然后,您只需要保留文件在数据库中的相对路径。

我还会在提交时对文件名进行规范化,以使其保持一致,例如20090219-001.doc

正如其他人建议的那样,您可以解析doc文件以提取纯文本信息并将其存储在数据库中以获得文本搜索的好处。