如何在存储桶中选择文件密钥以最大化AWS S3的性能

时间:2018-06-22 14:46:31

标签: amazon-web-services amazon-s3

我对AWS非常陌生。我正在开发一个云应用程序,我想使用S3进行文件存储。 我读过Request Rate and Performance Considerations - Amazon Simple Storage Service是为了更好地理解索引在S3中的工作方式,但我不得不说这还不是很清楚。

我的应用程序是多租户,它将为每个客户存储许多文件。

我对钥匙的想法是:

bucketname/211a6589-caef-4554-acc6-bc0fd05d756d/a/f/z/3b288ae5-3779-49d1-a79e-1812d4fa76e2.pdf

以这种方式构成的键:

  1. 存储桶名称
  2. 租户的uuid
  3. 随机生成3个级别的文件夹
  4. 文件的uuid

第二点对我很有用,因为我将一个租户的所有数据都放在一个文件夹中。 uuid是唯一且随机的,因此应该是一个好习惯。 我还添加了3个嵌套文件夹级别(随机生成),因为最初是为磁盘存储创建此方法的,因此可以平衡文件系统上的inode。

从文档中,我不完全了解密钥的哪一部分用于在S3中建立索引。

我的方法是否足够好,以便从S3获得最佳性能?

1 个答案:

答案 0 :(得分:1)

首先,只有当存储桶“通常每秒超过100个PUT / LIST / DELETE请求或每秒超过300个GET请求”时,才需要这种工作。

这不是典型的情况,因此,如果您的应用程序不太可能达到这种水平,请不要花费太多精力。但是,如果您认为自己会达到这样的水平,那么尽早将其“正确”是个好主意。

想法是将负载分散到整个名称空间。可以将Amazon S3视为具有用于维护对象列表的树形结构。对于大型存储桶,树形结构的管理分散在服务器之间。目的是将流量分布在多台服务器上,而不是仅击中一台服务器。

如果您正在使用UUID来存储对象,并且UUID是随机的,则只需使用UUID 。这足以将负载分散到整个树结构上。甚至键前面的几个随机字符也足以分散负载。

如果您特别想以“每个租户”结构存储文件,请使用:

tenant-uuid/object-uuid

这不太好,因为一个租户可以同时获取/放置大量文件,并且会碰到一棵树结构的一小部分,但是如果您有多个同时用户,则对多租户应用程序的可能性很小。