【问题标题】:What are the different possibilities to store a large number of files in a SQL Server 2008 Database?在 SQL Server 2008 数据库中存储大量文件有哪些不同的可能性?
【发布时间】:2013-06-30 19:55:27
【问题描述】:

假设我想建立一个网站,该网站将容纳大量(至少 1000 万)小文件(大约 50KB,主要是 PDF,还有 word/excel 文档、jpg 和文本文件)。

使用SQL Server 2008数据库,存储这些文件有哪些不同的技术可能性(例如:使用带有文件名的表+文件系统的数据,使用varbinary等...)?

【问题讨论】:

    标签: sql-server file storage hard-drive


    【解决方案1】:

    SQL Server 2008 数据库提供了许多数据类型来存储二进制数据。

    FILESTREAM 数据类型是在 SQL Server 2008 中引入的,它们提供了将二进制数据存储到数据库的能力。但是对于少量的二进制数据,使用文件流效率不高,因为它需要额外的开销,例如在 SQL Server 2008 中创建和处理文件。FILESTREAM 存储不适合您的情况 在我看来它最适合

    • 平均1MB或更高时。
    • 不需要加密时,因为 FILESTREAM 数据不支持加密

    另一方面,varbinary 数据类型适合您的情况,其优点是节省存储空间并保持数据的准确表示。

    通常 FILESTREAM 适用于较大的文件,而 VARBINARY 适用于较小的文件。

    另外最好将文件直接存储到数据库中,因为它们的大小确实更小。

    您可以在这里阅读更多相关信息 - Database: image file as blob or file path?

    希望对你有帮助

    【讨论】:

    • 感谢您的建议,我会看看它。另一个问题(我必须承认一点点话题):是否有任何类型的数据库专用于文件存储和提供文档搜索功能? (例如:对 txt 文件进行全文搜索)
    • 我不认为有这样的数据库专门用于文件存储,文件存储是一个连接到网络的文件服务器,其主要目的是为共享磁盘访问提供位置
    【解决方案2】:

    你应该试试 FILESTREAM

    http://msdn.microsoft.com/en-us//library/bb933993(v=sql.105).aspx

    FILESTREAM 通过将 varbinary(max) 二进制大对象 (BLOB) 数据存储为文件系统上的文件,将 SQL Server 数据库引擎与 NTFS 文件系统集成

    另外,如果您可以升级到 sql2012,请查看 FileTable 功能(基于 FILESTREAM) - 它支持全文和语义搜索 http://msdn.microsoft.com/en-us/library/ff929144.aspx

    【讨论】:

      【解决方案3】:

      文件应该只被索引到数据库中(文件名和你需要的任何其他内容)。数据库应该包含这些文件的路径,而不是文件,因为它会杀死你的数据库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-18
        • 1970-01-01
        • 2016-10-23
        • 1970-01-01
        • 1970-01-01
        • 2011-03-17
        • 2011-03-17
        • 1970-01-01
        相关资源
        最近更新 更多