2wayで画像を保存できます
- 画像をサーバーにアップロードし、画像の URL をデータベースに保存します。
- 画像をデータベースに直接保存
どちらの方がよいですか?
2wayで画像を保存できます
どちらの方がよいですか?
To Blob or Not To Blobと呼ばれる Microsoft Research による非常に優れた論文があります。
多数のパフォーマンス テストと分析を行った後の結論は次のとおりです。
写真やドキュメントのサイズが通常 256K 未満の場合は、データベースVARBINARY
列に格納する方が効率的です
写真やドキュメントのサイズが通常 1 MB を超える場合は、ファイル システムに格納する方が効率的です (SQL Server 2008 のFILESTREAM
属性を使用すると、それらは依然としてトランザクション制御下にあり、データベースの一部になります)。
これら2つの間で、用途に応じて少しトスアップします
写真を SQL Server テーブルに保存する場合は、それらの写真を保存するために別のテーブルを使用することを強くお勧めします。従業員の写真を従業員テーブルに保存しないでください。別のテーブルに保存してください。そうすれば、従業員の写真をクエリの一部として常に選択する必要がないと仮定すると、従業員テーブルは無駄のない、意味のある、非常に効率的な状態を保つことができます。
ファイル グループについては、「ファイルとファイル グループのアーキテクチャ」で概要を確認してください。基本的に、最初から大規模なデータ構造用に別のファイル グループを使用してデータベースを作成するか、後でファイル グループを追加します。「LARGE_DATA」としましょう。
VARCHAR(MAX)
これで、または列を格納する必要がある新しいテーブルを作成する必要がある場合はいつでもVARBINARY(MAX)
、大きなデータ用にこのファイル グループを指定できます。
CREATE TABLE dbo.YourTable
(....... define the fields here ......)
ON Data -- the basic "Data" filegroup for the regular data
TEXTIMAGE_ON LARGE_DATA -- the filegroup for large chunks of data
ファイル グループに関する MSDN のイントロをチェックして、いろいろ試してみてください。
多くの質問と同様に、答えは「場合による」です。SharePoint のようなシステムはオプション 2 を使用します。多くのチケット追跡システム (Trac がこれを行うことは確かです) はオプション 1 を使用します。
(潜在的な) 制限についても考えてください。ボリュームが増加すると、データベースのサイズによって制限されますか? これは、ストレージの割り当てを増やすよりもデータベースのサイズを増やす方がはるかにコストがかかる、ホストされたデータベースやアプリケーションに特に関連します。
顧客のブランディング画像のように、これらがWebサイトに付随していることを考えると、サーバーに画像を保存すると、Webサイトの方がうまく機能します。次のFlickrを設定する場合、答えは明らかに異なります:)。1台のサーバーをファイルサーバーとして機能するように設定し、/ uploaded_imagesディレクトリ(または名前を付けたもの)を共有し、アップロードされた画像のベースURLを定義するアプリケーション変数を設定します。なぜそれが良いのですか?費用。ファイルサーバーは、安価なコモディティハードウェアです。汚れの安い商品(消費者向け)のバックアップソフトウェアを使用して、ファイルの内容をバックアップできます。そして、あなたのファイルサーバーが鳴り響き、誰かがアップロードされた画像の1日を失った場合はどうなりますか?誰も気にしない。彼らはそれらを再びアップロードするだけです。私たちのデータベースサーバーは、SSDSAN上で実行されるエンタープライズクラスターです。バックアップとトランログは、高価な帯域幅を介してリモートサイトに送信され、テープ上でもx期間維持されます。RDBMSのACID(原子性、一貫性、分離、耐久性)の利点が必要なすべてのデータに使用します。会社のロゴには使用していません。
正当な理由がない限り、データベースに保存してください。
それらをファイルシステムに保存するのは時期尚早の最適化です。
データベースを使用すると、参照整合性が得られ、すべてを一度にバックアップしたり、セキュリティを統合したりできます。
本SQLAnti-Patternsは、ファイルシステムにファイルを格納することをアンチパターンと呼んでいます。