2009-11-04 48 views
0

我做了一个人员维护屏幕。客户希望我将每个人的照片存储在数据库中,而且我没有问题。我有一个单独的表格,其中有两个字段,Id_person和Image。使用二进制数据/图像的表格中的性能

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

这将是一个很好的大小限制?客户只需要面对的图片,但我敢肯定有人会尝试在全程质量“最后模型”相机使图片;)

感谢。

回答

1

通常最好保留一个图像文件夹,而数据库只是引用该文件夹。理想情况下,每个人都有一个唯一的ID,“图像”文件夹中的文件与该ID相匹配。

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

只有您会知道您的数据库服务器每行是否可以接受额外的8KB。

+0

我完全赞成你......但客户要保存在服务器DDBB的照片。 – Jonathan 2009-11-04 21:02:15

+1

真的......我刚刚添加了一些文字来解决这个问题。 – jheddings 2009-11-04 22:41:27

1

如果absoultely必须这样做,我会说,限制它只是几KB每个。但是,世界上的每个数据库管理员都可能会告诉你,将数据库中的图像放入数据库字段是一个非常糟糕的主意。最明显的是,当数据库文件大小超过两千兆字节时,您将看到性能急剧下降。

我宁愿做jheddings所说的,并且每个人的ID都有一个文件夹作为文件名,然后在网络共享上使用标准.jpg或其他文件,以便所有使用该应用程序的计算机都可以访问这些图像。

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

如果您的客户绝对不能拥有网络共享路径,我只会将图像弄脏。

+0

我将使用jheddings参数和替代方法来说服客户端。 – Jonathan 2009-11-04 21:08:28

+1

是的,您需要限制文件大小以防止人们直接从相机上传完整尺寸的照片。但是,在现代系统上的任何现代数据库中,大型表格/表格空间都不是问题。实际上,微软研究院的一项研究表明,对于小于256KB的任何事情,最好让数据库管理存储而不是文件系统(research.microsoft.com/pubs/64525/tr-2006-45.pdf)。如果即使他们的发现是关闭了2个数量级,那也是64KB。 – AngerClown 2009-11-06 01:07:11

+0

确实感谢您的链接! – Jonathan 2009-11-08 17:28:58

0

,只要它是与ID单独的表| BLOB只有不应该有任何性能问题,即取照片,但在另一边,我更喜欢保持在DB只是文件上的硬盘引用(或者即使其更好只有你不真的用户照片需要一个参考,因为ID为1的用户去/images/1.jpg)