web-dev-qa-db-ja.com

画像の保存-SQLDBとAzureBlobストレージ

現在、新しいアプリケーションを作成していますが、アプリケーション内の特定のエンティティに画像があります(Webサイトでの表示目的でのみ使用されます)。

後でアプリケーションをAzureでホストしたいのですが、Azure Blobストレージを使用してすべてのイメージを保存するのが良いのか、それとも単にDBに保存するのが良いのかを考えています。

ウェブサイトに画像を読み込むときのパフォーマンスの面で優れている点は何ですか?

  • SQL:コントローラー-> DB->表示
  • Azure Blob:コントローラー-> AzureDBへのWeb呼び出し->表示

誰かが私にどちらかの解決策の利点を説明して、私が決心できるようにしてくれませんか?

14
Nik

データベースストレージスキームをどのように設計するかは主観的ですが、シナリオでは客観的考慮すべきことがあります。私はそれらに対処し、「どちらを選ぶべきか」をあなたに任せます...

Azure Storage BLOBは、大量の「ブロック」データ(ドキュメント、画像など)用に設計されています。 SQLデータベースのようなものは、メタデータ(検索/インデックス作成/クエリ)用に設計されています。

すべてはSQLデータベースを介して実行でき、SQLクエリについてのみ心配する必要があります(そして、それはすでに慣れ親しんでいるように思えます)。 SQL Server(およびSQLデータベース)には、常にBLOBタイプを介してバイナリコンテンツを格納する機能がありました。

can画像をSQLデータベースに保存している間、クエリ可能なメタデータを保存するだけではなく、データベースのサイズが大幅に増加することがわかります。また、SQLデータベースサービスを使用するとストレージを拡張できますが、ブロブストレージ(最大500 TB)は、SQLデータベースサービスよりも低コストで大規模に拡張できます。 SQL ServerをVMで実行している場合でも、ブロブと同等のストレージコスト(接続されたディスク)とVMコスト)があります。

ストレージBLOB自体は、クエリ言語を提供しません。コンテナやBLOB名を知っている必要があります。したがって、最適な検索を行うには、メタデータを含むクエリ可能なデータベース(SQLデータベースなど)が必要になります。

画像をBLOBに保存し、データベースのURIを介してそれらを参照すると、データベースに対してクエリを実行し、画像のURIを見つけて、BLOBストレージから適切に読み取ることができます。

注:blobを使用すると、ブラウザやアプリなどへの直接の画像URIアクセスを提供できます(blobがプライベートとしてマークされている場合でも)。これにより、バイナリを配信するときにアプリ層をバイパスできます(画像)エンドユーザーへのコンテンツ。ブロブはCDNにキャッシュされることもありますが、これはSQLデータベースでは実行できません。

どちらを選択するかは、最終的にはあなた次第です。それぞれを使用する客観的な理由を簡単に説明しました。

18
David Makogon

BLOBでははるかに安価です。

また、おそらくBLOBとしてより高速な転送を行う予定です。これで、SQLを使用すると最初のルックアップが少し速くなる可能性がありますが、大きな画像の場合はBLOBが優先されると思います。 SQLは単純で、大きなものには最適化されておらず、BLOBは最適化されています。

また、SQLを自由に使用して、短いものを提供できます。

7
paparazzo