web-dev-qa-db-ja.com

多くの小さなAzureストレージBLOBコンテナー(それぞれがBLOBを含む)を持っている方がよいのでしょうか、それとも大量のBLOBを含む1つの本当に大きなコンテナーを持っている方が良いでしょうか?

したがって、シナリオは次のとおりです。

Azureストレージにデータのblobを書き込むWebサービスの複数のインスタンスがあります。ブロブを受信したタイミングに応じて、ブロブをコンテナー(または仮想ディレクトリ)にグループ化できるようにする必要があります。時々(最悪の場合は毎日)古いBLOBが処理されてから削除されます。

次の2つのオプションがあります。

オプション1

「blobs」と呼ばれるコンテナを1つ作成し(たとえば)、そのコンテナにすべてのブログを保存します。各blobは、ディレクトリスタイル名を使用します。ディレクトリ名には、受信した時刻が入ります(例:「hr0min0/data.bin」、「hr0min0/data2.bin」、「hr0min30/data3.bin」、「hr1min45/data.bin」 "、...、" hr23min0/dataN.bin "など-[〜#〜] x [〜#〜]分ごとに新しいディレクトリ)。これらのBLOBを処理するものは、最初にhr0min0 BLOBを処理し、次にhr0minXなどを処理します(処理中にBLOBはまだ書き込まれています)。

オプション2

到着時間に基づいた名前を持つコンテナが多数あります(したがって、最初はblobs_hr0min0、次にblobs_hr0minXなどと呼ばれるコンテナになります)。コンテナ内のすべてのBLOBは、指定された時間に到着したBLOBです。これらのブログを処理するものは、一度に1つのコンテナーを処理します。

だから私の質問は、どのオプションが良いですか?オプション2を使用すると、並列化が向上しますか(コンテナは異なるサーバーに配置できるため)、またはオプション1を使用すると、多くのコンテナが他の未知の問題を引き起こす可能性がありますか?

73
encee

Win Azure BLOBストレージでのパーティション分割は、コンテナではなくBLOBレベルで行われるため、(スケーラビリティ/並列化の観点から)それほど重要ではないと思います。さまざまなコンテナに分散する理由は、アクセス制御(SASなど)またはストレージの合計サイズに関係しています。

詳細については、こちらを参照してください: http://blogs.msdn.com/b/windowsazurestorage/archive/2010/05/10/windows-Azure-storage-abstractions-and-their-scalability-targets.aspx

(「パーティション」までスクロールします)。

引用:

ブロブ–パーティションキーはブロブ名に対応しているため、アクセスをスケールアウトするために、できるだけ多くのサーバーで異なるブロブへのアクセスを負荷分散できます。これにより、コンテナーは必要な大きさまで拡大できます(ストレージアカウントのスペース制限内)。トレードオフは、複数のBLOBでアトミックトランザクションを実行する機能を提供しないことです。

56
Eugenio Pace

Blobに直接アクセスすることに関して、誰もが優れた答えをくれました。ただし、コンテナー内のBLOBをリストする必要がある場合は、多コンテナーモデルを使用するとパフォーマンスが向上する可能性があります。私は、1つのコンテナに大量のBLOBを保存している会社と話しました。コンテナ内のオブジェクトを頻繁にリストし、それらのBLOBのサブセットに対してアクションを実行します。完全なリストを取得する時間が増加しているため、彼らはパフォーマンスに打撃を与えています。

これはあなたのシナリオには当てはまらないかもしれませんが、考慮すべきことです...

56
David Makogon

理論的には、多くのコンテナと、より多くのBLOBを持つより少ないコンテナの間に違いはないはずです。追加のコンテナは、追加のセキュリティ境界としてニースにすることができます(パブリック匿名アクセスまたは異なるSAS署名など)。追加のコンテナは、整理時にハウスキーピングを少し簡単にすることができます(単一のコンテナの削除とターゲティングの比較)私はこれらの理由でより多くのコンテナを使用する傾向があります(パフォーマンスのためではありません)。

理論的には、パフォーマンスへの影響は存在しないはずです。 blob自体(完全なURL)は、Windows Azureのパーティションキーです(長い間使用されてきました)。これは、パーティションサーバーから負荷分散される最小のものです。そのため、同じコンテナ内に2つの異なるBLOBを異なるサーバーから提供することができます(また、そうすることも多いでしょう)。

Jeremyは、コンテナの数に応じてパフォーマンスが異なることを示しています。なぜそうなのかを説明するのに十分なベンチマークを掘り下げていませんが、矛盾を説明するために他の要因(サイズ、テスト期間など)を疑います。

19
dunnry

これに関係するもう1つの要因もあります。価格!

現在、操作リストとコンテナの作成は同じ価格です:0,054 US $/10.000コール

実際には、ブロブを書くのと同じ価格です。

したがって、極端な原因では、多くのコンテナを作成および削除すると、より多くの費用を支払うことができます

  • 削除は無料です

あなたはここで電卓を見ることができます: https://Azure.Microsoft.com/en-us/pricing/calculator/

4
Jiří Herník