Base64字符串和图像

时间:2013-03-21 04:58:38

标签: asp.net sql-server

当我使用图像数据库作为我的asp.net Web应用程序时,我发现了两种方法! 第一种方法是使用“Image”数据类型,第二种方法是将image转换为base64字符串并以“byte”数据类型存储。

我想知道哪种方法更好,为什么?

1 个答案:

答案 0 :(得分:1)

不推荐使用

Image类型,因此不是一个选项。 SQL Server中没有byte类型,有一种名为tinyint的类型,它等同于byte类型,但我很确定这不是你所要求的。

所以这是你的实际的问题,纠正了错误的术语:

  

当我使用图像数据库作为我的asp.net Web应用程序时,我发现了两种方法!第一种方法是使用VARBINARY(max)数据类型,第二种方法是将图像转换为base64字符串并存储在VARCHAR(max)数据类型中。

Base64编码为二进制数据增加了大量的内容,它将3个八位字节转换为4个八位字节,因此增加了33%的开销。这是您的存储中消耗的不动产(无论是数据库还是文件)。

然而一个Web应用程序将以压倒性的 为base64编码的响应提供媒体文件。将文件编码在存储中可以节省Web服务器上的CPU,因为它可以直接流式传输存储内容,而无需通过base64编码。并不是说base64编码很昂贵(非常便宜且非常缓存)正确完成后,使用流语义

因此,请选择您的毒药:为使用的较小磁盘空间保存二进制内容,或者采用33%的大小惩罚,以便更快地响应写入并减少Web层上的CPU。

有关从数据库正确存储和提供媒体文件的示例,请参阅Download and Upload images from aSP.Net

关于存储是数据库或文件系统的无休止的讨论,我指向To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem?及其结论:

  

研究表明,如果物体大于   平均一兆字节,NTFS具有明显的优势   在SQL Server上。如果对象低于256   千字节,数据库有明显的优势。内   这个范围,这取决于如何写密集   工作量是。

本研究探讨了数据库外存储的管理问题(一致的备份 - 还原,故障转移),但这些问题仅在第2版的产品中讨论过。