首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库:图像文件是blob还是文件路径?

数据库:图像文件是blob还是文件路径?
EN

Stack Overflow用户
提问于 2013-06-05 02:01:00
回答 3查看 6.4K关注 0票数 3

我知道这个问题已经被问过很多次了。

我读了整个this帖子,但还是没能说到一点。

我正在做一个网站,将允许用户下载壁纸和歌曲。除了我,没有人会上传那些壁纸/歌曲。我的意思是说,用户不会上传它们。目前。每个文件的平均大小为6MB(对于歌曲)。

现在,你更喜欢在这里做什么?将它们存储为blob文件还是使用文件路径?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-05 02:54:56

在我看来,你应该把path而不是blob存储在里面。但这又取决于许多其他因素--您有自己的服务器吗?或者你把它放在别的地方托管?将这些东西作为blob放在DB中真的很重要吗?您的备份策略是什么,等等。

我有我自己的推理

  • 文件系统是用来管理文件的,在你的情况下,歌曲和图像并不是很重要。想象一下,如果你的数据库大小增加了,性能就会下降。如果对象的平均大小大于1兆字节,则NTFS比SQL Server

具有明显的优势。

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

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

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

票数 7
EN

Stack Overflow用户

发布于 2013-06-05 02:06:39

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

如果使用文件路径,则必须在该路径上设置不同且一致的安全设置。您还必须执行某些操作以强制使用唯一文件名等。您还需要为该目录设置备份

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

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

票数 1
EN

Stack Overflow用户

发布于 2015-12-25 03:03:18

我在上找到了的另一个好答案,所以我和你分享一下:

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

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

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

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

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

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

与使用文件系统相比,

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

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

代码语言:javascript
复制
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数据导致繁重的数据库(当您在数据库中存储许多文件时),则数据库备份过程可能需要更多时间才能完成,这会给您带来麻烦。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16924499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档