これは私が知っている古い質問ですが、SQL Server 2012では、ファイルをデータベースに保存することは最終的に問題ありませんか、それともデータベース内のファイルへの参照のみを使用してファイルシステムに保存する必要がありますか?
それらをデータベースに保存することが最近受け入れられると考えられる場合、それを行うための最も効果的な方法は何ですか?
暗号化を適用する予定なので、処理がそれほど速くないことを感謝します。
これは私が知っている古い質問ですが、SQL Server 2012では、ファイルをデータベースに保存することは最終的に問題ありませんか、それともデータベース内のファイルへの参照のみを使用してファイルシステムに保存する必要がありますか?
それらをデータベースに保存することが最近受け入れられると考えられる場合、それを行うための最も効果的な方法は何ですか?
暗号化を適用する予定なので、処理がそれほど速くないことを感謝します。
回答:
ToBlobまたはNotToBlobと呼ばれるMicrosoftResearchによる本当に良い論文があります。
多数のパフォーマンステストと分析の後の彼らの結論は次のとおりです。
写真やドキュメントのサイズが通常256K未満の場合は、データベースのVARBINARY列に保存する方が効率的です。
画像またはドキュメントのサイズが通常1MBを超える場合は、ファイルシステムに保存する方が効率的です(SQL Server 2008のFILESTREAM属性を使用すると、トランザクション制御下にあり、データベースの一部になります)。
それらの2つの間に、それはあなたの用途に応じて少しトスアップです
写真をSQLServerテーブルに配置する場合は、それらの写真を保存するために別のテーブルを使用することを強くお勧めします。従業員の写真を従業員テーブルに保存しないでください。別のテーブルに保存してください。そうすれば、クエリの一部として従業員の写真も常に選択する必要がないと仮定すると、従業員テーブルは無駄のない、平均的で非常に効率的なままになります。
ファイルグループについては、ファイルとファイルグループアーキテクチャでイントロを確認してください。基本的に、最初から大きなデータ構造用に個別のファイルグループを使用してデータベースを作成するか、後でファイルグループを追加します。それを「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イントロをチェックして、試してみてください。
VARBINARY(MAX)別のファイルグループへの保存に関して、別の「ファイル」テーブルがある場合は、そのテーブル全体を別のファイルグループに保存するだけですか、それともファイル「メタ」データを標準のファイルグループに保存してVARBINARY(MAX)、新しいファイルグループ?
FILETABLESQL Server 2012の機能について話しているのですか?そこでは、ファイルに関するメタデータのみがSQL Server内に保存されます(と同様FILESTREAM)。実際のファイル(それを構成するバイト)は、データベースの外部のディスクドライブに保存されます
まだ簡単な答えはありません。それはあなたのシナリオに依存します。 MSDNには、決定に役立つドキュメントがあります。
ここで説明する他のオプションがあります。ファイルシステムに直接またはBLOBに格納する代わりに、SQL Server 2012のFileStreamまたはファイルテーブルを使用できます。ファイルテーブルの利点は簡単に思えます(ただし、私はそれらを直接体験したことはありません。 。)
この記事は間違いなく読む価値があります。
あなたはFILESTREAMを読むかもしれません。決定に役立つドキュメントの情報を次に示します。
次の条件が当てはまる場合は、FILESTREAMの使用を検討する必要があります。
- 保存されているオブジェクトは、平均して1MBを超えています。
- 高速読み取りアクセスが重要です。
- アプリケーションロジックに中間層を使用するアプリケーションを開発しています。
小さいオブジェクトの場合、varbinary(max)BLOBをデータベースに格納すると、ストリーミングパフォーマンスが向上することがよくあります。