SQL Serverに画像を保存しますか?


191

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

  • これは悪い考えですか?

  • サイトが大きくなると、サイトのパフォーマンスに影響しますか?

別の方法は、画像をディスクに保存し、画像への参照のみをデータベースに保存することです。これは多くの人が経験した共通のジレンマに違いありません。私はいくつかのアドバイスを歓迎しますし、できれば実際に間違いを少なくしたいです。


5
2017年にこの問題の新しい追加はありますか?これは現在でも有効ですか?
ハイカルナシュハ2017

回答:


270

Microsoft ResearchによるTo BlobまたはNot To Blobという非常に優れた論文があります。

多数のパフォーマンステストと分析を行った後の結論は次のとおりです。

  • 画像またはドキュメントのサイズが通常256KB未満の場合、それらをデータベースの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イントロをチェックして、それをいじってください!


これは良いことなのか悪いことなのか......•通常、画像やドキュメントのサイズが1 MBを超える場合は、それらをファイルシステムに保存する方が効率的です(SQL Server 2008のFILESTREAM属性を使用しても、トランザクションやトランザクションの制御下にあります)とデータベースの一部)
htm11h

すばらしい答えです。画像データに専用のテーブルを使用することをお勧めする理由を詳しく説明したい場合は、dba.SEで別の質問を作成しました
ハインツィ

15

私は一度このジレンマに陥り、意見を求めてグーグルでかなり調査しました。私が見つけたのは、mySQLでは特にPHPなどの言語からのアクセスが容易になる一方で、実際には多くの人が大きいイメージの方がイメージをディスクに保存するのに適していることです。

同様の質問を見つけました

小さなPNG画像を保存するためのMySQL BLOB対ファイル?

私の最終的な評決は、プロフィール写真など、ユーザーごとに存在する必要がある小さな正方形の画像などの場合、mySQLは一連のつまみをhddに保存するよりも優れている一方で、フォトアルバムなどの場合はフォルダー/ imageファイルの方が優れています。

それが役に立てば幸い


14

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

ただし、イメージをデータベースに保存する場合は、データベースをパーティション分割して、イメージ列が別のファイルに存在するようにする必要があります。

ファイルグループの使用の詳細については、http: //msdn.microsoft.com/en-us/library/ms179316.aspxを参照してください


11

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

サーバー上のフォルダーに保存された多くの画像を使用して、クライアントが何年も使用しているアプリケーションを作成しました。

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

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

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

ちょうど私の2セント。


3
いい視点ね。画像のバックアップは、データベースのバックアップと同じくらい重要です。
Chris Catignani

また、ファイルシステム上のイメージには、ネットワーク権限も必要です。
Chris Catignani

2
ネットワーク許可は良い点です。しかし、DBのバックアップしかない場合は見当たりません。あなたはきっとアプリケーションとファイルのバックアップを持っているでしょう。DBを失うのと同じくらい簡単ですが、ファイルがあります。
Norbert Norbertson



7

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


0

私の経験では、別の場所に保存されている画像のURLに保存することが、単純なプロジェクトの最良の方法です。

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