我正在工作的网站(使用asp.net 3.5),其中用户可以上传一个或多个简历。 数据库是sql server 2005. 关于这些文档存储的建议是什么? 我应该将它作为blob存储在数据库中,还是将路径存储在数据库中并将文档保存在物理文件夹中? 有人可以提及每个wrt性能和可扩展性的优缺点吗?存储word文档
谢谢!
我正在工作的网站(使用asp.net 3.5),其中用户可以上传一个或多个简历。 数据库是sql server 2005. 关于这些文档存储的建议是什么? 我应该将它作为blob存储在数据库中,还是将路径存储在数据库中并将文档保存在物理文件夹中? 有人可以提及每个wrt性能和可扩展性的优缺点吗?存储word文档
谢谢!
在数据库中存储文件,为您提供:
(+)更容易内务管理,磁盘
(+)一致的编程和访问模型(授权)
上没有孤立的文件( - )数据库增长过快,这将增加备份时间和磁盘空间的使用来保存备份文件
我不认为这两个选项都比另一个更好。如果您期望的文档数量非常大,那么您将达到有关目录中文件数量的限制(作为绝对限制,或者因为目录查找在特定点上开始执行得非常糟糕)。
感谢您的回答...! – 2009-02-19 15:26:13
将数据保存在数据库中将使管理日期变得更容易。您不必确保数据库中的数据与文件系统上的数据(文件路径)保持同步。
说了这么多之后,意识到在数据库中存储大型数据块时可能会遇到性能问题,这一点很重要。幸运的是,在这方面已经做了一些研究来调查可能的情况。我建议你看看微软研究院关于这个主题的this paper。希望有所帮助。
此外,我应该提到的是,Microsoft SharePoint将其Word文档(以及其他文件)作为斑点存储在SQL Server数据库中。你可以阅读更多关于这个here。
没有什么可说不能做的 - 解析文档&将重要的元信息(如联系信息,常用词等)存储到索引列中,存储文档路径。这是我为高可用性(每月高达21M次展示)所做的,但我们提供的是媒体文件,但文件大小&本质上大致相同。
您可以尝试将文档文件存储在单独的数据库中并使用简单恢复模式。然后,您可以轻松地备份文档数据库,而无需担心备份的大小膨胀。
我已经有两个系统将文件存储在文件夹中 - 当我们得到一个文件夹中的大约20K个文件时,这两个系统的缩放比例都很差。可以通过使用子文件夹来解决(例如2008-01,2008-02),但正如其他人所说的那样,您遇到了同步问题。
数据库允许您存档/删除旧的简历并且不存在同步问题。只要您不想全文搜索数据,就可以在存储/检索时压缩/解压缩文本。假设一个10-20K的文件,你可能压缩到1-2K。不是那么大。
我负责管理许多TB图像的一些应用程序。我认为这个应用程序是相似的,因为它将相对较大的文件存储到典型的数据库行中。我们发现在数据库中存储文件路径是最好的。
有几个问题:
我建议将它存储在数据库中以保持一致。
在数据库中存储时要考虑的另一点是SQL数据库可以由多个文件组成。我建议的是在该数据库上创建第二个文件(.ndf),该文件包含包含BLOB数据的表。
这提供了一些关键的好处,它可以(1)在单独的磁盘阵列上运行,如果有更多的需求需要它。 (2)可以分别进行备份和恢复。 (3)不会膨胀你的主OLTP数据库文件。
我会用每一个工作的最佳工具去:
使用文件系统将允许你使用正确的工具用于管理文件:您可以使用OS的压缩功能,使用增量备份工具等,并没有与可能包含大量有时制作粗糙的Word文档臃肿数据库图片。
随着文件数量变大,从文件系统的角度来看问题很容易解决:将文件存储到相对路径目录中,以便可以控制每个目录下文件的数量(例如,创建每周文件夹或在文件数超过一定限制时创建新文件夹)。
然后你只需要保持文件在数据库中的相对路径。
我还会在提交时对文件名进行标准化以保持它们的一致性,如20090219-001.doc
。
如其他建议,您可以解析doc文件以提取纯文本信息并将其存储在数据库中以获得文本搜索的好处。
将它们转换为纯文本并存储在Text列中... Pro:现在您可以使用FTS索引它们。其他专业:你摆脱所有烦人的格式。 – Shog9 2009-02-19 02:06:10