多くの小さなAzureストレージblobコンテナー(それぞれにいくつかのblobがあります)または1つの非常に大きなコンテナーに大量のblobがある方が良いですか?


81

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

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

私には2つの選択肢があります:

オプション1

たとえば、「ブロブ」と呼ばれる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はより良いですか?

回答:


61

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間でアトミックトランザクションを実行する機能を提供しないことです。


ブロブ名をできるだけ短くする必要はありますか?(私は「大量のブロブを含む1つの非常に大きなコンテナー」、質問のオプション1を持っています。)
nmit026 2017年

60

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

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


1
これは良い点です。執筆時点(2016年6月)では、コンテナー内のすべてのBLOBのリストを取得し、リストのCountプロパティを確認する以外に、コンテナー内のBLOBの数を取得する方法はまだないと思います。
Steven Rands 2016年

ブロブ名をできるだけ短くする必要はありますか?(私は「大量のブロブを含む1つの非常に大きなコンテナー」、質問のオプション1を持っています。)
nmit026 2017年

まさに私たちが避けようとしているシナリオ
Glenit 2018

21

理論的には、多くのコンテナと、より多くのブロブを持つ少数のコンテナの間に違いはありません。追加のコンテナは、追加のセキュリティ境界として役立ちます(たとえば、パブリック匿名アクセスやさまざまなSAS署名など)。追加のコンテナーを使用すると、プルーニング時にハウスキーピングが少し簡単になります(各blobをターゲットにするのではなく、単一のコンテナーを削除します)。私はこれらの理由で(パフォーマンスのためではなく)より多くのコンテナーを使用する傾向があります。

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

ジェレミーは、コンテナの数が多い場合と少ない場合でパフォーマンスに違いがあることを示しています。なぜそうなるのかを説明するのに十分なベンチマークを掘り下げていませんが、不一致を説明するために他の要因(サイズ、テストの期間など)を疑っています。


4

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

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

同じ価格が実際にブロブを書くためのものです。

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

  • 削除は無料です

ここで計算機を見ることができます:https//azure.microsoft.com/en-us/pricing/calculator/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.