amazon-web-services - 优化 Amazon S3 上的照片存储命名法
问题描述
我必须存储大量照片(+1 000 000,一张最大 5MB)并且我有一个数据库,每条记录都有 5 张照片,那么最好的解决方案是什么:
- 为每条记录的 slug/id 创建目录,并在其中上传照片
- 将所有照片放入一个目录,名称中包含 id 或 slug of record
- 将所有照片放在一个目录中,并在数据库中为每条记录添加带有照片名称的字段。
我使用 Amazon S3 服务器。
解决方案
这在很大程度上取决于您的用例,例如如何使用数据库和照片。这里没有足够的信息来给出明确的答案。
但是,对于存储方面的一些建议...
最简单的选择就是为每张照片使用一个UUID。这实际上是一个没有意义的随机名称。将该名称存储在您的数据库中,您的系统将知道哪个图像与哪个记录相关。无需重命名图像,因为名称只是唯一 ID,不会传达更多信息。
当您想要提供对特定图像的访问权限时,您的应用程序可以生成一个Amazon S3 预签名 URL,该 URL 授予对对象的限时访问权限。到期时间过后,URL 将不起作用,因此该对象仍然是私有的。以这种方式授予访问权限意味着无需按“所有者”将图像分组到目录中,因为访问权限是按对象授予的,而不是按所有者授予的。
另外,请注意Amazon S3 实际上并不支持文件夹。相反,对象的键(“文件名”)是整个路径(例如user-2/foo.jpg
)。这使其更具人类可读性(因为对象“似乎”在文件夹中),但实际上并不影响数据在幕后存储的方式。
底线:如何存储图像并不重要。重要的是您将图像名称存储在数据库中,以便您知道哪个图像与哪个记录匹配。避免需要重命名图像的情况 - 只需给它们一个名称并保留它。
推荐阅读
- c++ - Visual Studio 找不到glad.h
- c - 如何处理共享内存中的指针?
- google-apps-script - 通过 appscript 比较谷歌表单和谷歌表格中的输入值
- android - 为什么使用 Xamarin.Forms 的 iOS 工具栏重复而不是隐藏?
- arrays - 从 API 遍历 JSON 格式的哈希数组
- javascript - 如何将 blob 附加到 dom?
- docker - 如何在 swarm 中联网多个堆栈
- php - 已弃用:指令 'allow_url_include' 在第 0 行的 Unknown 中已弃用
- javascript - 将一组 ID 传递给函数(onchange 函数)
- powershell - 如何在 PowerShell 中将纪元时间转换为人类可读的格式?