代码之家  ›  专栏  ›  技术社区  ›  Jonathan

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

  •  0
  • Jonathan  · 技术社区  · 15 年前

    我做了个人维护屏幕。客户希望我将每个人的照片存储在数据库中,我做到了没有问题。我有一个单独的图像表,有两个字段:id_person和image。

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

    一个好的尺寸限制是什么?客户只需要面部照片,但我相信有人会尝试用全质量的“最新款”相机拍摄照片;)

    谢谢。

    3 回复  |  直到 15 年前
        1
  •  1
  •   jheddings    15 年前

    通常最好保存一个包含图像的文件夹,数据库只引用该文件夹。理想情况下,每个人都有一个唯一的ID,并且“images”文件夹中的文件与该ID匹配。

    如果您真的想直接存储二进制数据,您可以在8kb的jpeg中获得合理质量的照片(大约250x250像素,质量为25%)。当然,这对于印刷来说是不可接受的,但是对于识别来说是可以的。

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

        2
  •  1
  •   Jrud    15 年前

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

    我更愿意按照jheddings所说的那样做,在每个人的文件夹中,ID是文件名,然后在网络共享上使用标准.jpg或其他文件,这样所有使用该应用程序的计算机都可以访问图像。

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

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

        3
  •  0
  •   TomaszSobczak    15 年前

    只要它位于单独的带有id_blob的表中,那么获取该照片时不应该出现任何性能问题,但在另一方面,我更喜欢将对HDD上文件的引用保留在db中(或者更好的做法是,如果它的唯一用户照片不需要引用,因为具有id 1的用户转到/images/1.jpg)。