2

私はS3バケットに(潜在的に数百万の)オブジェクトを保存するアプリを書いています。私のアプリは、最新のオブジェクトを(大まかに)取得して処理し、同じバケットに書き戻します。アプリが最新のオブジェクトに簡単にアクセスできるように、キーにアクセスして新しいオブジェクトに名前を付ける方法が必要です。

SimpleDBにメタデータを配置することでこれを適切に実行できることはわかっていますが、厳密な整合性は必要ありません。アプリが最新ではないオブジェクトを取得しても問題ありません。古いキーではなく新しいキーを取得する傾向があるアプリが必要です。そのため、S3のみを使用してシンプルにしようとしています。

S3メタデータにアクセスして並べ替える方法はありますか?または、必要なものを取得するオブジェクトに名前を付けるためのスキームがあるかもしれません(S3は辞書式順序でキーをリストし、botoはページングを処理できることを知っているため)。

4

1 に答える 1

1

ここでは、s3 のバージョン管理が非常に役立ちます。これらが本当に同じ「もの」である場合は、バケットのバージョニングを有効にし、キーからデータを取得して変更し、同じキーに戻すことができます。

あなたはboto'sを使う必要があります

bucket.get_all_versions( prefix='yourkeynamehere' )

最新のバージョンを最初に取得するため、この関数はページングを処理しませんが、最初のインデックスを取得するだけで最新バージョンを取得できます。

さらに前に戻り、ページングが必要な場合、boto は list_versions() 関数も提供します。これはプレフィックスも取り、心配する必要なくすべてのバージョンを反復処理する結果セットを提供します。

これらのオブジェクトが実際に「同じ」オブジェクトではない場合、s3 は差分を保存しないため、問題にはなりません。毎回すべてを保存します。オブジェクトの「タイプ」が複数ある場合は、最新のものを取得できる複数のバージョン セットを持つことができます。

私はバージョン管理を使用してきましたが、それにとても満足しています。

于 2011-06-19T00:40:39.080 に答える