3

I know this question has been asked any a times.

I read this whole post but still couldn't reach to a point.

I am making a website which will allow users to download the wallpapers and songs. No one else will upload those wallpapers/songs except me. I mean to say that the users will not be uploading them. At present. Each file on an average is 6Mb(for songs).

Now, what would you prefer to do here? Store them as blob files or use file paths?

4

3 回答 3

7

在我看来,您应该存储路径而不是 blob。但这又取决于许多其他事情——你有自己的服务器吗?还是您将其托管在其他地方?这些东西作为 blob 放入 DB 真的很重要吗?你的备份策略是什么等等。

我有自己的道理

  • 文件系统用于管理文件,在您的情况下,歌曲和图像不是很重要。想象一下,如果您的数据库规模扩大,性能将会下降。如果对象平均大于 1 MB,则 NTFS 比 SQL Server 具有明显优势

另外请记住,当您必须备份数据库时,在某些阶段可能会很头疼。另一方面,如果您的歌曲文件在磁盘上,那么它会很容易。

此外,如果您仅将路径存储在数据库中,您可以考虑将您的歌曲和图片也保存在其他服务器(或多个服务器)上。

总之,我可以看到使用文件系统存储歌曲和图片的许多优点。

于 2013-06-04T18:54:55.857 回答
1

这真的取决于你在做什么。

如果您使用文件路径,那么您必须在该路径上进行不同且一致的安全设置。您还必须做一些事情来强制执行唯一的文件名等。您还需要为该目录​​设置备份

如果您使用 blob,数据库会为您处理安全性,备份应与数据库中的其他所有内容保持一致。

您可以将它们作为 blob 存储在不同的表中,并使用从第一个表到 blob 表的 FK。那么您可以避免多次存储相同的 blob,等等。

于 2013-06-04T18:06:38.747 回答
1

我在forum.asp.net中找到了KBrocksi_SEC的另一个很好的答案,所以我与您分享:

处理 BLOB 数据的常用替代方法是将 BLOB 数据存储在文件系统中,并将指针(最好是统一资源定位符 [URL] 链接)存储在数据库列中以引用适当的文件。

在数据库中存储 BLOB 数据的优势

在数据库中存储 BLOB 数据具有许多优点:

  • 使 BLOB 数据与行中的其余项目保持同步更容易。
  • BLOB 数据与数据库一起备份。拥有一个单一的存储系统可以简化管理。
  • 可以通过SQL Server 2005 中的XML 支持访问 BLOB 数据,它可以返回 XML 流中数据的 base 64 编码表示。
  • 可以对包含固定或可变长度字符(包括 Unicode)数据的列执行SQL Server 全文搜索 (FTS)操作。您还可以对图像字段中包含的基于文本的格式化数据执行 FTS 操作,例如 Microsoft Word 或 Microsoft Excel 文档。

在数据库中存储 BLOB 数据的缺点

仔细考虑哪些资源可能更好地存储在文件系统而不是数据库中。很好的例子是通常通过 HTTP HREF 引用的图像。这是因为:

  • 与使用文件系统相比,从数据库中检索图像会产生大量开销。
  • 数据库 SAN 上的磁盘存储通常比 Web 服务器场中使用的磁盘上的存储更昂贵。

以下代码显示如何使用 ADO.NET 将从文件中获取的二进制数据写入 SQL Server 中的图像字段。

public void StorePicture( string filename )
{
  // Read the file into a byte array
  using(FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
  {
    byte[] imageData = new Byte[fs.Length];
    fs.Read( imageData, 0, (int)fs.Length );
  }


  using( SqlConnection conn = new SqlConnection(connectionString) )
  {
    SqlCommand cmd = new SqlCommand("StorePicture", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@filename", filename );
    cmd.Parameters["@filename"].Direction = ParameterDirection.Input;
    cmd.Parameters.Add("@blobdata", SqlDbType.Image);
    cmd.Parameters["@blobdata"].Direction = ParameterDirection.Input;
    // Store the byte array within the image field
    cmd.Parameters["@blobdata"].Value = imageData;
    conn.Open();
    cmd.ExecuteNonQuery();
  }
}

我也可以自己在上述解释中添加另一个注释:

在数据库中存储 BLOB 数据的缺点

  • 如果您的 BLOB 数据导致数据库繁重(当您在数据库中存储许多文件时),那么数据库备份过程可能需要更多时间才能完成并让您头疼。
于 2015-12-24T19:03:17.693 回答