我应该为 Amazon S3 使用哪种对象键命名模式?

上次更新时间:2020 年 3 月 30 日

我预计我的 Amazon Simple Storage Service (Amazon S3) 存储桶会具有较高的请求速率。我应该使用哪种对象键命名模式来获得更好的性能?

解决方法

Amazon S3 存储桶中可以支持每秒每个分区前缀 3500 个 PUT/COPY/POST/DELETE 或 5500 个 GET/HEAD 请求。要针对高请求速率优化存储桶,请考虑使用能够在多个前缀之间分发对象的对象键命名模式。每个额外前缀都能使您的存储桶扩展以支持每秒额外的 3500 个 PUT/COPY/POST/DELETE 或 5500 个 GET/HEAD 请求。

例如,awsexamplebucket 中的以下对象都分到前缀 folderA 的组中:

awsexamplebucket/folderA/object-A1
awsexamplebucket/folderA/object-A2
awsexamplebucket/folderA/object-B1
awsexamplebucket/folderA/object-B2
awsexamplebucket/folderA/object-c1
awsexamplebucket/folderA/object-c2

要将这些对象分发至多个前缀,可以在前面引入与对象名称不同的字符作为前缀:

awsexamplebucket/Afolder/object-A1
awsexamplebucket/Afolder/object-A2
awsexamplebucket/Bfolder/object-B1
awsexamplebucket/Bfolder/object-B2
awsexamplebucket/Cfolder/object-c1
awsexamplebucket/Cfolder/object-c2

有关更多信息和命名示例,请参阅 Amazon S3 性能技巧与诀窍

数据湖应用程序

根据 Hive、Spark 或 Presto 等引擎的建议,某些应用程序在使用基于日期的命名约定的数据湖上运行。如果您的数据湖应用程序具有极高吞吐量,基于日期的命名约定可能需要额外调整。

重要提示:这种吞吐量级别并不常见,适用于使用数千个 CPU 内核进行分析的 PB 级存储的用例。如果您不需要这种扩展,则无需实施额外调整。

遵循基于日期的命名约定的对象键名称通常类似如下样式:

awsexamplebucket/HadoopTableName/dt=yyyy-mm-dd/objectname

如果映射到单个 Amazon S3 键名称前缀的表超出了每个前缀支持的请求速率,则该应用程序将获得 503 错误。要扩展到更高的流量速率,最好的做法是使用自然键分区来拆分映射到键名称前缀的表。

例如,如果您有一个映射到 Amazon S3 前缀的“users”表,则可以按用户所在国家/地区对表进行分区:

awsexamplebucket/users/US/dt=yyyy-mm-dd
awsexamplebucket/users/CA/dt=yyyy-mm-dd

您必须查看应用程序对如何向表中添加分区的要求,以及应用程序支持的命名约定。例如,参阅分区数据可了解有关 Amazon Athena 上的表分区的更多信息。Athena 使用 Hive 对数据进行分区


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?