具有二进制数据/图像的表中的性能

时间:2009-11-04 20:53:58

标签: performance sql-server-2008 image binary-data

我做了一个人维护屏幕。客户希望我将每个人的照片存储在数据库中,我没有遇到任何问题。我有一个单独的表格,包含两个字段,Id_person和Image。

我有点担心,因为这是我第一次使用数据库中的图像。当表格超过1000/5000图像时,我会遇到性能问题吗?我想每张图片的大小都会有所不同。我确信我需要控制用户不要在数据库中保存非常大的图像。

什么是好的尺寸限制?客户只需要面部图片,但我确信有人会尝试使用“最后一台模型”相机拍摄完整品质的照片;)

感谢。

3 个答案:

答案 0 :(得分:1)

通常首选保留图像文件夹,而DB只引用该文件夹。理想情况下,每个人都有一个唯一的ID,“images”文件夹中的文件与该ID匹配。

如果你真的想直接存储二进制数据,你可以用8KB的JPEG(大约250x250像素,25%质量)获得合理质量的照片。当然,这对于打印来说是不可接受的,但对于识别来说很好。

只有您知道是否可以在数据库服务器中每行额外接收8KB。

答案 1 :(得分:1)

如果你绝对必须这样做,我会说限制为每个只有几千字节。但是,世界上每个数据库管理员都可能会告诉您,将数据库中的图像转换为数据库字段是一个非常非常糟糕的主意。最值得注意的是,当数据库文件的大小超过2千兆字节时,您会看到性能急剧下降。

我更愿意按照jheddings的说法做一个文件夹,每个人的ID都是文件名,只需在网络共享上使用标准.jpg或之后的东西,这样所有使用该应用程序的计算机都可以访问这些图像。 / p>

有些人发现仅仅使用ID不够好,因为需要删除或存档照片,在这种情况下,他们会将NVARCHAR(MAX)字段放入其数据库并将网络文件路径存储到图像中实际图像。

如果您的客户绝对无法拥有网络共享路径,我只会查看该图像。

答案 2 :(得分:0)

只要它在ID | BLOB的单独表中,不应该在获取该照片时出现任何性能问题,但另一方面我更喜欢在数据库中仅保留对hdd上文件的引用(如果只有它,则更好用户照片你真的不需要引用,因为ID为1的用户转到/images/1.jpg)