繁体   English   中英

MySQL数据库设计-存储图像-单个表或多个表

[英]MySQL Database design - Storing Images - Single table or multiple tables

我目前正在使用一种产品,其中有不同类型的图像,例如产品图像,用户个人资料图片,徽标等。 我需要一个具有良好查询性能的数据库。

我想到了两个数据库设计。

选项1.-将所有图像存储在具有id,title,url_full,url_thumb,status和timestamp字段的单个表中

好处

  1. 我可以使用单个ImageModel文件插入删除/更新数据。 因此,图像存储将没有多重逻辑。 这只是一个逻辑,“存储在单个表中”。 因此,每当必须保存图像时,我都可以调用ImageModel的方法

缺点

  1. 如果产品图像很多而用户图像较少,则由于产品数量巨大,用户图像查询将变慢。

选项2-在具有id,title,url_full,url_thumb,status和timestamp字段的不同表中存储不同类型的图像

好处

  1. 一个部分中增加的记录数不会影响另一部分的查询速度

缺点

  1. 必须为每种图像类型编写单独的模型文件/功能。
  2. 每当必须存储图像时,都需要指定类型。

我的问题是,这是更好的方法。 优点和缺点是真正的问题。如果还有其他优点/缺点,请列出。 或者,如果还有其他上帝数据库设计,请提出建议。

请根据实际情况回答,那里有很多产品和用户。

这是从很长的评论开始的,所以我决定将其发布为答案。 对我来说,在不同的表中存储不同类型的图像听起来是个坏主意。 一方面,例如,如果以后出现新类型的类别,该设计将如何扩展? 这样一来,您就能应付任意数量的新图像表了吗? 同样,查询所有图像将需要一系列的联接或联合,这可能会很昂贵。

您提到了多图像表模式的以下优点:

一个部分中增加的记录数不会影响另一部分的查询速度

如果将单个图像表与在type列上的索引一起使用,则增加一种类型的记录数不一定会增加对第二种类型的图像的查询。 这是您提供的单个图像表的缺点:

如果产品图像很多而用户图像较少,则由于产品数量巨大,用户图像查询将变慢。

的确,添加更多记录通常会降低查询速度。 但是,在类型上具有适当的索引将大大减少此问题。

具有适当索引的单个图像表似乎要好得多。

您将如何交付图像? 如果通过<img src=http:...>进行,则只有一个答案:单独的文件。

是的,缩略图可以通过其他机制完成,例如转换为base64并包含在img标签中。 如果页面上有很多缩略图,这可能是最好的。

但是将缩略图与要查询的列放在同一表中可能会降低性能。 因此,我们需要查看查询和表架构(到目前为止)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM