我们将文件存储在 Amazon AWS S3 中,并希望在 Postgres 的文档表中保留对这些文件的引用。我正在寻找最佳实践。我们使用 Python/Django,目前存储从 boto3.s3.key.Key().generate_url(...)
返回的 URL。但是有很多问题:
- 必须从 URL 中解析存储桶和键。
- 需要对键名进行urldecode。
- 不支持object versioning .
- Unicode 支持很容易搞砸,尤其是由于 urlencode/decode 步骤。
因此,我正在考虑将 Bucket、Key 和 Version 存储在三个单独的字段中,并将 Key 创建为 DB 主键和安全编码文件名的组合,但不知道是否有更好的方法方法?
最佳答案
不确定是否是最好的方法,但我们存储:
- 数据库中的唯一对象 ID(可能是 UUID)(Postgres 有一个本地
UUID
类型) - 配置中的bucket名称和路径(因为我们将所有相同类型的对象存储在相同的bucket+path下)
这样你至少可以:
- 将对象移动到不同的存储桶/路径,而无需重写整个数据库表
- 如果您愿意,从 S3 切换到本地存储
- 在不丢失对象跟踪的情况下丢弃主键(例如,在分区表时)
关于django - 在数据库中存储对 AWS S3 对象的引用的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47268512/