AWS S3:推荐嵌套桶架构

AWS S3: Recommend Nested Bucket Architecture

我在设计我的 S3 存储桶结构时遇到了挑战。

我的申请

我有几种类型(角色)的用户,每个用户都有不同类型的 PDF 文档将上传到 S3。用户将在他们的仪表板中看到每个文档,并且应该能够从应用程序中查看 PDF(理想情况下通过在新选项卡中打开而不是下载它)。下面是一个例子:

用户角色

  1. role_a
  2. role_b

用户文档(role_a)

  1. document_type_a(文件名:0888a5ce)
  2. document_type_b(文件名:c00630fr)
  3. document_type_c(文件名:2349d1c)

用户文档(role_b)

  1. document_type_x(文件名:fe294090)
  2. document_type_y(文件名:cad2d3dc)

每个用户可以有零个或多个文档。

我的问题:

  1. 设计嵌套 S3 存储桶结构的最佳方法是什么?
  2. 文件名将保存在每个用户的数据库中。除此之外,还有哪些S3 bucket结构的组件应该保存在数据库中,应该从应用中派生出哪些组件来优化这些PDF文档的上传和下载?
  3. 在上面的嵌套结构中,存储桶名称是什么,文档的键是什么?

真正的嵌套结构是不存在的。 s3 中的所有文件存储为存储桶和密钥,其中密钥是您认为是目录的结构。您可以通过将一个文档存储在存储桶中来确认这一点,比如 /foo/bar/doc.pdf。然后删除该文件并查看 s3 中的结构。 Foo 和 bar 将消失。

所以您可以通过多种方式做事,其中一种是:

桶:我的桶

关键字:/role_a/document_type_a/0888a5ce.pdf

最简单的结构是完全平面存储结构:

  • 为每个对象生成一个唯一 ID(例如使用 GUID 函数)
  • 使用等于唯一 ID 的键将对象保存在 S3 中
  • 将唯一 ID 存储在数据库中,将对象与原始文件名、日期、权限等元数据一起映射到您的用户

您可以选择为每个对象添加一个用户标识符作为前缀,这对于调试或在数据库出现故障时尝试重建内容很有用,但是如果您正确地引用数据库进行用户文件列表。