当我使用图像数据库作为我的asp.net Web应用程序时,我发现了两种方法! 第一种方法是使用“Image”数据类型,第二种方法是将image转换为base64字符串并以“byte”数据类型存储。
我想知道哪种方法更好,为什么?
答案 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版的产品中讨论过。