3

フラットなAmazonS3バケットに200,000枚の画像があると仮定します。

バケットは次のようになります。

000000-1.jpg
000000-2.jpg
000000-3.jpg
000000-4.jpg
000001-1.jpg
000001-2.jpg
000002-1.jpg
...
ZZZZZZ-9.jpg
ZZZZZZ-10.jpg

(6桁のハッシュの後にカウントが続き、その後に拡張子が続く)

一致するすべてのファイルが必要な場合000001-*.jpg、それを取得するための最も効率的な方法は何ですか?

PHPではrglob($path,'{000001-*.jpg}',GLOB_BRACE)、一致の配列を取得するために使用しますが、それがリモートで機能するとは思いません。

バケット内のすべてのファイルのリストを取得し、配列内で一致するものを見つけることができますが、それはコストのかかる要求のようです。

おすすめは何ですか?

4

1 に答える 1

8

Amazonは、S3APIを使用してこれを直接行う方法を提供しています。

リストS3オブジェクトを呼び出すときにこのオプションを使用prefixして、プレフィックスで始まるオブジェクトのみを返すことができます。たとえば、AWS SDK forPHPを使用します。

// Instantiate the class
$s3 = new AmazonS3();

$response = $s3->list_objects('my-bucket', array(
    'prefix' => '000001-'
));

// Success?
var_dump($response->isOK());
var_dump(count($response->body->Contents))

このdelimiterオプションが役立つ場合もあります。これを使用して、すべての一意の6桁のハッシュのリストを取得できます。

于 2012-05-15T18:23:14.390 に答える