AWS S3:推荐嵌套存储桶架构

时间:2018-12-20 07:46:04

标签: amazon-web-services pdf amazon-s3 document bucket

在构造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存储桶结构的其他哪些组件保存在数据库中,以及应从应用程序派生哪些组件来优化这些PDF文档的上载和下载?
  3. 在上述嵌套结构中,存储桶名称是什么,文档的密钥是什么?

2 个答案:

答案 0 :(得分:1)

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

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

您可以选择为每个对象添加一个用户标识符作为前缀,这对于在数据库故障的情况下进行调试或尝试重建内容很有用,但是如果您正确地引用数据库的列表,则不会有特别的性能优势。用户文件。

答案 1 :(得分:0)

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

因此,您可以通过多种方式进行操作,其中一种是:

桶:mybucket

键:/role_a/document_type_a/0888a5ce.pdf