3

私はこの質問が何度も尋ねられたことを知っています。

この投稿全体を読みましたが、まだポイントに到達できませんでした。

私は、ユーザーが壁紙と曲をダウンロードできるようにする Web サイトを作成しています。私以外の誰もそれらの壁紙/曲をアップロードしません。ユーザーがそれらをアップロードしないと言いたいのです。現在のところ。平均して各ファイルは 6Mb (曲の場合) です。

さて、あなたはここで何をしたいですか?それらを BLOB ファイルとして保存するか、ファイル パスを使用しますか?

4

3 に答える 3

1

それは本当にあなたが何をしているかに依存します。

ファイル パスを使用する場合は、そのパスに異なる一貫したセキュリティ設定を行う必要があります。また、一意のファイル名などを強制するために何かをする必要があります。そのディレクトリのバックアップも設定する必要があります

BLOB を使用する場合、データベースがセキュリティを処理します。バックアップは、データベース内の他のすべてのものと一致している必要があります。

最初のテーブルから BLOB テーブルへの FK を使用して、それらを別のテーブルに BLOB として格納できます。そうすれば、同じブロブを複数回保存することを避けることができます。

于 2013-06-04T18:06:38.747 に答える
1

forum.asp.netKBrocksi_SECによる別の良い回答を見つけたので、それを共有します。

BLOB データを処理するために一般的に使用される別の方法は、BLOB データをファイル システムに格納し、適切なファイルを参照するためにデータベース列にポインタ (できれば URL (Uniform Resource Locator) リンク) を格納することです。

BLOB データをデータベースに格納する利点

BLOB データをデータベースに格納すると、次のような多くの利点が得られます。

  • BLOB データを行の残りの項目と同期させておく方が簡単です。
  • BLOB データはデータベースと一緒にバックアップされます。単一のストレージ システムを使用すると、管理が容易になります。
  • BLOB データには、SQL Server 2005 のXML サポートを介してアクセスできます。これにより、データの Base 64 エンコード表現を XML ストリームで返すことができます。
  • SQL Server 全文検索 (FTS)操作は、固定長または可変長の文字 (Unicode を含む) データを含む列に対して実行できます。Microsoft Word や Microsoft Excel ドキュメントなど、画像フィールドに含まれる書式設定されたテキストベースのデータに対して FTS 操作を実行することもできます。

BLOB データをデータベースに格納することの欠点

データベースではなくファイル システムに格納する方が適切なリソースを慎重に検討してください。良い例は、通常 HTTP HREF を介して参照される画像です。それの訳は:

  • データベースからイメージを取得すると、ファイル システムを使用する場合と比較して、かなりのオーバーヘッドが発生します。
  • 通常、データベース SAN 上のディスク ストレージは、Web サーバー ファームで使用されるディスク上のストレージよりも高価です。

次のコードは、ADO.NET を使用して、ファイルから取得したバイナリ データを SQL Server のイメージフィールドに書き込む方法を示しています。

public void StorePicture( string filename )
{
  // Read the file into a byte array
  using(FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
  {
    byte[] imageData = new Byte[fs.Length];
    fs.Read( imageData, 0, (int)fs.Length );
  }


  using( SqlConnection conn = new SqlConnection(connectionString) )
  {
    SqlCommand cmd = new SqlCommand("StorePicture", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@filename", filename );
    cmd.Parameters["@filename"].Direction = ParameterDirection.Input;
    cmd.Parameters.Add("@blobdata", SqlDbType.Image);
    cmd.Parameters["@blobdata"].Direction = ParameterDirection.Input;
    // Store the byte array within the image field
    cmd.Parameters["@blobdata"].Value = imageData;
    conn.Open();
    cmd.ExecuteNonQuery();
  }
}

また、上記の説明に自分で別のメモを追加できます。

BLOB データをデータベースに格納することの欠点

  • BLOB データが原因でデータベースが重くなる場合 (DB に多くのファイルを保存する場合)、データベースのバックアップ プロセスの完了に時間がかかり、頭痛の種になる可能性があります。
于 2015-12-24T19:03:17.693 に答える