在数据库中存储对AWS S3对象的引用的最佳实践?

Sco*_*ord 12 django postgresql amazon-s3

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

  • 必须从URL中解析存储桶和密钥.
  • 需要对密钥名称进行urldecode.
  • 不支持对象版本控制.
  • 由于urlencode/decode步骤,Unicode支持很容易搞乱.

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

Lin*_*nas 6

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

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

这样你至少可以:

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