Amazon S3 にはどのようなオブジェクトキー命名パターンを使用する必要がありますか?
最終更新日: 2020 年 3 月 30 日
Amazon Simple Storage Service (Amazon S3) バケットの要求レートが高くなりそうです。パフォーマンスを向上するには、どのオブジェクトキー命名パターンを使用する必要がありますか?
解決方法
Amazon S3 バケットは分割されたプレフィックスごとに、毎秒 3,500 件の PUT/COPY/POST/DELETE リクエスト、または 5,500 件の GET/HEAD リクエストをサポートできます。高い要求レートでバケットを最適化するには、複数のプレフィックスにオブジェクトを分散するオブジェクトキー命名パターンを使用することを検討してください。プレフィックスを追加するごとに、バケットはスケーリングして、1 秒あたり 3,500 件の PUT/COPY/POST/DELETE リクエストまたは 5,500 件の 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 Performance Tips & Tricks」をご参照ください。
データレイクアプリケーション
一部のアプリケーションは、Hive、Spark、Presto などのエンジンで推奨されているように、日付ベースの命名規則を使用するデータレイクで実行します。データレイクアプリケーションのスループットが非常に高い場合、日付ベースの命名規則での調整が必要となる場合があります。
重要: このレベルのスループットは一般的ではありません。数千の CPU コアで分析を行うペタバイト級のストレージを使用するようなユースケースに適用されます。これほどの規模を必要としない場合は、調整を追加で実装する必要はありません。
日付ベースの命名規則に従うオブジェクトキー名は、多くの場合、次のようになります。
awsexamplebucket/HadoopTableName/dt=yyyy-mm-dd/objectname
単一の Amazon S3 キー名のプレフィックスにマッピングされたテーブルが、プレフィックスごとにサポート済み要求レートを超えると、アプリケーションは 503 エラーを取得する可能性があります。トラフィックをより高いレートにスケールするには、ナチュラルキーパーティションを使用して、キー名のプレフィックスにマッピングされたテーブルを分割することをお勧めします。
たとえば、Amazon S3 プレフィックスにマッピングする「ユーザー」テーブルがある場合、ユーザーの国別にテーブルを分割できます。
awsexamplebucket/users/US/dt=yyyy-mm-dd
awsexamplebucket/users/CA/dt=yyyy-mm-dd
テーブルにパーティションを追加する方法については、アプリケーションの要件と、アプリケーションがサポートする命名規則を確認する必要があります。1 つの例として、Amazon Athena でのテーブルパーティション化の詳細については、「データのパーティション分割」をご参照ください。Athena では、データのパーティション分割に Hive が使用されます。