- メインコンテナ(「xyz」)の下に作成された特定のユーザーのフォルダーのフォルダーサイズを取得したい。
コンテナーの一覧表示を実行するときに、"prefix" および "format" クエリ パラメーターを指定して、特定のプレフィックス (この場合はユーザー名) で始まるオブジェクトのみを返し、結果を JSON/XML 形式で返すことができます。結果が JSON または XML で返される場合、オブジェクトに関する追加情報が含まれます。以下は、JSON 応答の例です。
[
{
"bytes": 13,
"content_type": "text/plain",
"hash": "8ddd8be4b179a529afa5f2ffae4b9858",
"last_modified": "2015-01-27T00:08:44.671230",
"name": "<username>/some_object.txt"
},
...
]
注:このソリューションでは、10,000 個のオブジェクトが返された場合、「marker」クエリ パラメータを使用して結果をページングすることを検討する必要があります。
さらに、ユーザーを複数のコンテナーに分割することを検討することもできます。結果整合性ウィンドウ (これについては後で詳しく説明します) に関する限り、より正確な結果を取り戻すために、これを行うことをお勧めします。たとえば、コンテナー「work_0」から「work_9999」を作成し、次のような内容でどのユーザーがどのコンテナーに移動するかを決定します。
$user_md5 = md5($username);
// Only use part of the md5sum, unless you have support for big (128-bit) integers
$user_int = hexdec(str_split($user_md5, 7)[0]);
$container_id = $user_int % 10000;
$container_name = "work_$container_id";
print "Container for user \"$username\" is \"$container_name\"\n";
- ユーザーが制限を超えているかどうかを達成する他の方法はありますか。
ユーザーの成長速度に制限がある場合、または合計ユーザー数を制限できる場合は、ユーザーごとにコンテナーを作成することを検討してください。これの欠点は、サポートできるユーザー数が、アカウントあたりのコンテナーの最大数 (500,000) によって制限されることです。ただし、コンテナ クォータ機能を使用できるようになります。この機能を使用して、オブジェクトを PUT しようとしてクォータを超えた場合、HTTP 413 応答を受け取ります。「X-Container-Bytes-Used」ヘッダーを使用して、ユーザーの使用状況を確認することもできます。
注:以前、「結果整合性ウィンドウ」について言及しました。場合によっては、コンテナーのリスト/クォータがすぐに更新されないことがありますが、最終的には更新されます。ほとんどの場合、この遅延は目立たないか、最小限です。ただし、ユース ケースで、ユーザーがクォータを超えてアップロードすることを絶対に許可しないことが必要な場合は、ユーザーの使用状況を追跡する別の方法 (ローカル データベースなど) を探す必要がある場合があります。