2013-02-21 51 views
5

我使用DATA URI(客户端,使用画布)将映像发布到服务器。我现在有两种选择:我可以将“image”作为字符串保存在varchar(max)列中,或者我可以将其转换为byte []并将其另存为varbinary(max)。数据URI与数据库中的二进制数

就实施而言,努力是相同的。我试图确定什么会更高效,至于1:DB中的空间和2:显示图像。有没有人看到有关这方面的分析或有一个很好的方法来衡量这一点?

一个供参考 - 一个3KB图像是在DB 100K左右的字符。

使用:ASP.NET 4.5,MVC,SQL Server 2008中

明晰

我可以在图像中VARBINARY使用字节[]存储在数据库中(MAX)柱等是通常情况下,或者我可以在HTML5画布中存储DATA URI,其格式如下:data:image/png; base64,iVBORw0K ... varchar(max)列中。

存储字节[]是典型的,不需要进一步解释。存储数据URI只是一个字符串和显示图像会是一个问题的:

<img src="data:image/png;base64,iVBORw0K" /> or 
<img src="@Model.Uri" /> 

我的问题是哪一个更高性能和节省空间,如果有任何文档,白板纸或分析解决这个特定的比较。

+0

这是有帮助的。有链接?我找了40分钟,找不到任何这样的比较。 – 2013-02-21 03:10:34

+1

你会使用varbinary(max)not varchar(max) – 2013-02-21 03:16:00

+1

虽然我很欣赏你的努力,但问题不在于在数据库中存储图像 - 这会花费我7秒;) - 这是关于存储[DATA URI ](http://en.wikipedia.org/wiki/Data_URI_scheme)而不是通常存储的byte []/blob。 – 2013-02-21 05:13:28

回答

3

由于没有真正的答案和信息很少发现与谷歌暴食,我做了一个简单的定时测试将20K记录(小于毫无意义),并在一个循环一次选择一个记录。我使用PetaPoco进行数据库访问。如果您发现某些内容或有一些信息,请分享。我认为这将是DATA URI获得更多关注的更常见的情况。

URI的插入和选择始终更快。相对更快,因为它以毫秒为单位进行测量。这不应该是一个因素 - 它更容易。

就渲染到客户端而言。我使用了两种方法,一种是从MVC操作方法(这是在http响应中呈现图像)返回一个ImageResult(自定义ActionResult,它返回一个图像),并返回URI字符串并将其用作图像SRC(即,src =“@ Model.Uri“)。再次,几乎没有区别。结果使用Chrome开发工具:

ImageResult: 2 requests, 200ms, 3.2KB 
DATA URI: 2 requests, 200ms, 3.9KB 

但是,我也注意到,在ImageResult(字节[])版本将自动获得由浏览器缓存,因为它是所有意图和目的的图像。数据URI版本不会被浏览器自动缓存。

从这个基本的测试,字节[]是去,因为浏览器和其他所有结果等于自动缓存的方式。

我的设置: i7处理器,8GB内存,SSD,SQL Server 2012中,IIS快递

缓存的好处是我没有设置发现。是的,我敢肯定,一个可以管理的HTTP标头,ETAG,输出缓存等