在 S3 中使用带有外部存储的图像和缩略图进行数据库设计的最佳实践?

Posted

技术标签:

【中文标题】在 S3 中使用带有外部存储的图像和缩略图进行数据库设计的最佳实践?【英文标题】:Best practice for database design with images and thumbnails with external storage in S3? 【发布时间】:2012-03-03 08:51:23 【问题描述】:

首先:我在 amazon s3 中保留图像。

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

我的设计表和关系:

表格文档

id     file_name
1      my_document         

表格图片

id document_id  missing_column??
1     1
2     1                  

表格images_sizes

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

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

但我不知道我是否走在正确的道路上。这种方式建模的缺点是什么?你建议我换一种方式吗?图像表错过了不同寄存器的列...我不知道具体做什么。

非常感谢大家!!

【问题讨论】:

你是在正确的方式。就个人而言,我会保留文件名和扩展名,但如果你希望它是这样的,没问题。 【参考方案1】:

你为什么不只有一张桌子?

|Image 
----------------------------------------------------------
id | image_size(if you need to know size) | url(varchar)
----------------------------------------------------------

文件名可能很棘手。您可能有 2 张具有相同文件名的图像。在 S3 中使用 id 作为键名。如果你使用 id,你可以去掉上面的 'url' 列并遵循这样的约定

https://myapp.s3.amazonaws.com/id.jpeg

如果它是固定大小,您也不需要 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

【讨论】:

以上是关于在 S3 中使用带有外部存储的图像和缩略图进行数据库设计的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章

AWS Lambda使用S3

Codeigniter缩略图图像路径不能存储在MySql中

使用 multer 将多个图像上传到 AWS S3

关于使用带有远程存储的 sorl-thumbnails 的 celery 的指针?

laravel 5.1中的PDF图像缩略图预览?

[AWS][Serverless] 无服务器Serverless 图像缩略图应用