SQL Serverで画像を保存する?

私は小さなデモサイトを作成し、その上で私はSQLサーバーの画像カラム内に画像を保存しています。いくつか質問があるのですが...

  • これってダメなんでしょうか?

  • 成長したときに、私のサイトのパフォーマンスに影響を与えることはありませんか?

その代わり、ディスクに画像を保存し、データベースには画像への参照のみを保存することになります。これは、多くの人が抱えている共通のジレンマに違いありません。私はアドバイスを歓迎しますし、実際、できることなら失敗を少なくしたいと思っています。

質問へのコメント (1)
ソリューション

Microsoft Researchの「To Blob or Not To Blob」1という論文に、とても良いものがあります。

多くの性能テストと分析の末の彼らの結論はこうだ。

  • 写真や文書のサイズが256KB以下の場合、データベースのVARBINARYカラムに格納する方が効率的です。

  • 写真や文書のサイズが通常1MBを超える場合、ファイルシステムに保存する方が効率的です(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イントロをチェックして、遊んでみてください。

解説 (2)

私も一度このジレンマに陥り、googleでいろいろと意見を調べました。その結果、大きな画像はディスクに保存したほうがいいという意見が多く、PHPなどの言語からはmySQLのほうが簡単にアクセスできるということがわかりました。

似たような質問を見つけたので

https://stackoverflow.com/questions/4659441/mysql-blob-vs-file-for-storing-small-png-images

最終的な結論としては、プロフィール画像など、ユーザーごとに必要な小さな四角い画像は、HDDにサムネイルをたくさん保存するよりもmySQLの方が良いし、フォトアルバムなどは、フォルダや画像ファイルの方が良いということでした。

お役に立てれば幸いです

解説 (0)

画像をディレクトリに格納し、データベースに画像ファイルへの参照を格納するのがいいと思います。

ただし、データベースに画像を保存する場合は、画像カラムが別のファイルに存在するようにデータベースを分割する必要があります。

ファイルグループの使い方については、こちら http://msdn.microsoft.com/en-us/library/ms179316.aspx をご覧ください。

解説 (0)

SQL Serverに画像を格納する場合「image」データ型を使用しないでください、MSによると、SQLサーバーの新しいバージョンでは段階的に廃止されています。 代わりに varbinary(max)を使用してください。

https://msdn.microsoft.com/en-us/library/ms187993.aspx

解説 (0)

画像をWebサーバーのカタログではなくデータベースに保存するのが良い理由。

クライアントが長年使用してきた、サーバー上のフォルダーに多数の画像が格納されたアプリケーションを作成しました。

今、彼らはあなたのところに来ます。 サーバーが破壊され、新しいサーバーで復元する必要があります。 古いサーバーにアクセスできなくなりました。 彼らが持っている唯一のバックアップはデータベースのバックアップです。

もちろんソースがあり、新しいサーバーに簡単にデプロイして、SqlServerをインストールして、データベースを復元できます。 しかし、今ではすべての写真がなくなっています。

写真をSqlServerに保存した場合、すべてが以前と同様に機能します。

ちょうど私の2セント。

解説 (3)

ファイルテーブルと呼ばれる別のオプションが2012年にリリースされました:https://msdn.microsoft.com/en-us/library/ff929144.aspx

解説 (0)

パフォーマンスの問題は有効ですが、実際に画像をデータベースに保存しないようにする必要がある本当の理由は、データベース管理のためです。 データベースは非常に急速に成長し、データベースのコストは単純なファイルストレージよりもはるかに高くなります。 データベースのバックアップと復元は、ファイルのバックアップ復元よりもはるかに高価で時間がかかります。 ピンチでは、画像で肥大化したデータベースよりもはるかに迅速に小さなデータベースを復元できます。 Azure上の1 TBのファイルストレージを1 TBデータベースと比較すると、コストに大きな違いがあることがわかります。

解説 (0)