S3 中具有外部存储的图像和缩略图的数据库设计最佳实践?

Luc*_*cas 5 database image amazon-s3

第一:我将图像保存在亚马逊 s3 中。

所以我的图像的 URL 根是: https: //myapp.s3.amazonaws.com/

我的设计表和关系:

表格文件

id     file_name
1      my_document         
Run Code Online (Sandbox Code Playgroud)

表格图像

id document_id  missing_column??
1     1
2     1                  
Run Code Online (Sandbox Code Playgroud)

图像大小

id    images_id     image_size          file_name        file_extension
1         1          800                output1               .png
2         2          800                output2               .png
3         1          200                output1               .png
4         2          200                output2               .png
Run Code Online (Sandbox Code Playgroud)

然后构建获取图像的 url 将是 https://myapp.s3.amazonaws.com/document_id/image_size/file_name+file_extension

但我不知道我是否走在正确的道路上。这种方式建模有什么缺点?你建议我用另一种方式吗?图像表缺少不同寄存器的列。我不知道到底要做什么。

Rah*_*hul 0

为什么不只有一张桌子?

|Image 
----------------------------------------------------------
id | image_size(if you need to know size) | url(varchar)
----------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

文件名可能很棘手。您可能有 2 个具有相同文件名的图像。使用 id 作为 S3 中的键名称。如果您使用 id,则可以去掉上面的“url”列并遵循如下约定

https://myapp.s3.amazonaws.com/id.jpeg
Run Code Online (Sandbox Code Playgroud)

如果 image_size 是固定大小,则您也不需要在 URL 和表中使用 image_size。如果您要保存一组标准尺寸,则可以像 YouTube 一样遵循约定 -

http://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpg
http://img.youtube.com/vi/<insert-youtube-video-id-here>/1.jpg
http://img.youtube.com/vi/<insert-youtube-video-id-here>/2.jpg
http://img.youtube.com/vi/<insert-youtube-video-id-here>/3.jpg
Run Code Online (Sandbox Code Playgroud)