我知道这个问题已经被问过很多次了。
我读了整个this帖子,但还是没能说到一点。
我正在做一个网站,将允许用户下载壁纸和歌曲。除了我,没有人会上传那些壁纸/歌曲。我的意思是说,用户不会上传它们。目前。每个文件的平均大小为6MB(对于歌曲)。
现在,你更喜欢在这里做什么?将它们存储为blob文件还是使用文件路径?
发布于 2013-06-05 02:54:56
在我看来,你应该把path而不是blob存储在里面。但这又取决于许多其他因素--您有自己的服务器吗?或者你把它放在别的地方托管?将这些东西作为blob放在DB中真的很重要吗?您的备份策略是什么,等等。
我有我自己的推理
具有明显的优势。
还请记住,当您必须备份您的数据库时,在某些阶段可能会非常令人头疼。另一方面,如果您的歌曲文件在磁盘上,那么它将很容易。
另外,如果您只将路径存储在数据库中,则可以考虑将您的歌曲和图片保存在其他服务器(或多个服务器)上。
简而言之,我可以看到使用文件系统存储歌曲和图片的许多优点。
发布于 2013-06-05 02:06:39
这真的取决于你在做什么。
如果使用文件路径,则必须在该路径上设置不同且一致的安全设置。您还必须执行某些操作以强制使用唯一文件名等。您还需要为该目录设置备份
如果使用blobs,数据库将为您处理安全性,则备份应与数据库中的所有其他内容保持一致。
您可以将它们作为blob存储在不同的表中,并使用FK从第一个表到blob表。这样你就可以避免多次存储相同的blob,等等。
发布于 2015-12-25 03:03:18
我在上找到了的另一个好答案,所以我和你分享一下:
处理BLOB数据的常用替代方法是将BLOB数据存储在文件系统中,并且在数据库列中存储指针(优选为统一资源定位器URL链接)以引用适当的文件。
在数据库中存储BLOB数据的优势
在数据库中存储BLOB数据有许多优点:
在数据库中存储BLOB数据的缺点
仔细考虑哪些资源更适合存储在文件系统中,而不是存储在数据库中。典型的例子是通常通过HTTP HREF引用的图像。这是因为:
与使用文件系统相比,
以下代码显示了如何使用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数据的缺点
https://stackoverflow.com/questions/16924499
复制相似问题