3

首先,我注意到有很多关于这个的问题,很多都标记为重复。

我最终来到了这个

该问题的公认答案虽然部分解决了我的问题,但并没有回答所有问题。

我的问题是,用户上传了一张图片。我将路径存储在数据库中,将图像文件存储在文件系统中。但是,我制作了该图像的 3 个副本(大、中和小尺寸)。总而言之,我有 4 张图片 - 原始、大、中、小。

我是否应该将所有 4 个路径都存储在数据库中,像这样

ID  |      original      |    large        |    medium       |    small       |
----+--------------------+-----------------+-----------------+----------------+
 1  |  /path/to/original | /path/to/large/ | /path/to/medium | /path/to/small |

或者只存储原始路径,并为其他 3 个命名约定,如下所示: car.jpg, car.jpg, large-car.jpg, medium-car.jpg, small-car.jpg

我觉得这种方式对数据库的负担会减轻,而且如果以后,我想添加另一个大小(即超小),我就不必修改数据库了。

4

6 回答 6

7

如果给定行中的所有图像都位于同一位置,我会说它们的基本路径应该是它自己的列(而不是一直从原始图像的完整路径重新派生基本路径)。

如果数据库中的所有图像都位于同一个位置,则根本不要将基本路径存储在此表中;将它放在代码中或全局配置表中。

于 2009-07-12T01:17:07.257 回答
2

好像您正试图过度使用数据库。这个方法怎么样。

ImageID  | UserID  | name.. 
---------+---------+-----
1        | 495     | car454.jpg
2        | 495     | house.jpg
3        | 44      | kittysmall.jpg

并将所有图像存储在一个地方。

IMAGES_PATH = "/path/to/images"

并通过 imageID(自动增量)命名图像,因此对于第 5 个图像,它将是 5.ori.jpg 或 5.large.jpg 等

这样您就可以轻松查看谁拥有什么图像,并且用户可以上传具有相同文件名的不同图像而不必担心。

于 2009-07-12T05:16:21.107 回答
1

If the specific paths are consistent except for the file names why not use constants for the paths and then just store the different sized images in the appropriate directories and reference just the file names in the database.

The main principle here is avoiding duplicate information, in the database and in your code. For the database you achieve higher normal form, and for the code you achieve DRY (Don't Repeat Yourself).

Assume you structure is something like

/home/user/site/images/original/

/home/user/site/images/small/

/home/user/site/images/medium/

/home/user/site/images/large/

you could use constants for that info. e.g.

PATH_ORIGINAL = /home/user/site/images/original/

PATH_SMALL = /home/user/site/images/small/

PATH_MEDIUM = /home/user/site/images/medium/

PATH_LARGE = /home/user/site/images/large/

Then in your code you could do something like

smallcar = PATH_TO_SMALL . car.jpg;

Or just insert the appropriate constant variable inside whatever query output you have for loading the images.

The added benefit is that you have one place to change paths if you need to tweak directory structures or move code between servers, rather than update a whole slough of database records, which might be more problematic and error prone.

于 2009-07-12T10:11:23.193 回答
1

确保对原始图像的各种大小有一个可靠的命名约定,这将帮助您生成已知的缓存键,以便您可以将图像存储在一些缓存中,例如 memcache,这减轻了数据库和服务器磁盘 i/ 上的负载○

于 2009-07-12T05:07:38.080 回答
1

概括地说,我想说如果您可以重新创建信息(因为基数始终相同,后跟用户名),请不要将其存储在数据库中。如果您以后想更改存储图像的目录,无论出于何种原因,您都会遇到麻烦。

于 2009-07-12T05:18:11.273 回答
0

作为一个小调整,我很想将生成的缩略图等放在不同的路径中(例如:../generated/),以确保如果有人上传名为“汽车”的文件,您不会覆盖源图像-large.jpg'等

于 2009-07-12T08:07:55.253 回答