【问题标题】:Best practices for storing references to AWS S3 objects in a database?在数据库中存储对 AWS S3 对象的引用的最佳实践?
【发布时间】:2018-04-26 09:10:19
【问题描述】:

我们将文件存储在 Amazon AWS S3 中,并希望在 Postgres 的 Document 表中保留对这些文件的引用。我正在寻找最佳实践。我们使用 Python/Django,目前存储从 boto3.s3.key.Key().generate_url(...) 返回的 URL。但是有很多问题:

  • 必须从 URL 中解析存储桶和密钥。
  • 需要对键名进行urldecode。
  • 不支持object versioning
  • Unicode 支持很容易搞砸,尤其是由于 urlencode/decode 步骤。

所以,我正在考虑将 Bucket、Key 和 Version 存储在三个单独的字段中,并将 Key 创建为 DB 主键和安全编码的文件名的组合,但不知道是否有更好的接近?

【问题讨论】:

  • 很想听听您最终是如何处理此问题的,或者您发现了哪些最佳实践。考虑回答您自己的问题?
  • 基本上,我按照“考虑”时所说的那样去做。

标签: django postgresql amazon-s3


【解决方案1】:

不确定是否是最佳方法,但我们存储:

  • 数据库中的唯一对象 ID(可能是 UUID)(Postgres 有一个原生的 UUID 类型)
  • 配置中的bucket名称和路径(因为我们将所有相同类型的对象存储在同一个bucket+path下)

这样你至少可以:

  • 将对象移动到不同的存储桶/路径,而无需重写整个数据库表
  • 如果您愿意,可以从 S3 切换到本地存储
  • 丢弃您的主键(例如,在对表进行分区时)而不丢失您的对象的跟踪

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多