22

私は、ユーザーがプロフィールに写真を添付できるasp.net MVCアプリケーションを構築していますが、最近のメッセージなどを表示するダッシュボードのメッセージングガジェットのようなシステムの他の領域でも.

ユーザーがこれらをアップロードするとき、データベースとディスクのどちらに保存するのがよいか迷っています。

データベースの利点

  • データベース全体を簡単にバックアップし、関連付けられたプロファイル/ユーザー テーブルでプロファイル コンテンツ/画像を保持します。

  • 後でWebサービスを構築すると、プロファイルに関連するすべてのデータを1つの場所(データベース)から取得できます

ファイルシステムの利点

  • ディスクからファイルをロードする方がおそらく高速です

  • 他の利点は?

他のサイトはこの種の情報をどこに保存していますか? このような場合、データベースのパフォーマンスについて少し心配するのは正しいですか?

データベースから引き出された画像を一定期間キャッシュする方法があるのではないでしょうか?

あるいは、これらのイメージをデータベースに保存し、Web サーバーがそこからロードできるようにディスクにシャドウ コピーするというアイデアはどうでしょうか。これは、ディスク上のファイルの速度の利点を提供しながら、Db のバックアップと利便性の両方を提供するように思われます。

問題のインフラストラクチャ

  • Web サイトは、NTFS ファイル システムを実行している Windows Server 2003 上の IIS に展開されます。
  • データベースは SQL Server 2008 になります

概要

SO に関する多くの関連スレッドを読んでいると、多くの人が現在、SQL Server Filestream タイプに傾倒しています。ただし、私が収集できたものから (私が間違っている可能性があります)、ファイルが非常に小さい場合はあまりメリットがありません。ただし、ファイル ストリーミングは、ファイルが数 MB 以上の場合にパフォーマンスを大幅に向上させるように見えます。

私のプロフィール写真は約 5kb 程度に収まる傾向があるため、データベースのファイルストアに varbinary(max) として保存することにしました。

ASP.NET MVC では、このようにデータベースから引き出された画像に対して FileContentResults を返すパフォーマンスの問題が少し見られました。したがって、このファイルの場所がアプリケーションキャッシュに見つからない場合、読み取り時にファイルをディスクにキャッシュすることになりました。

だから私はハイブリッドに行ったと思います。

  • データのベイクアップを容易にするデータベース ストレージと、ファイルをプロファイルに直接リンクする
  • キャッシュを改善するためのディスクへのシャドウ コピー

いつでもディスク上のキャッシュ フォルダーを削除できます。画像が再要求されると、最初のヒットで再コピーされ、その後キャッシュから提供されます。

4

2 に答える 2

8

ファイルへの参照をデータベースに保存し、実際のファイルをディスクに保存する必要があります

このアプローチはより柔軟で、スケーリングが容易です。

静的コンテンツを提供する単一のデータベースと複数のサーバーを使用できます。複数のデータベースでその作業を行うのは、はるかに厄介です。

Flickr はこのように動作します。

ここでより詳細な回答を提供しました。役に立つかもしれません。

于 2010-08-10T21:00:53.943 に答える
5

実際には、高度に最適化されたファイルシステム エンジンを使用していない限り、データベースを使用したデータストアの検索は、所有する画像の数によっては実際には高速になる場合があります。データベースは高速検索用に設計されており、ファイル システムよりもはるかに興味深い手法を使用しています。

reiserfs (廃止) はルックアップに非常に優れており、zfs、xfs、および NTFS はすべて素晴らしいハッシュ アルゴリズムを備えており、Linux ext4 も有望に見えます。

システムへのヒットは、ブロック読み取りに関して何ら変わりはありません。問題は、別のオープン、filesend close を使用してアクセスされるファイル名 (ハッシュの可能性がありますか?) を返すクエリ ルックアップの方が高速であるということです。またはブロブを捨てるだけですか?

ネットワークへの影響、処理への影響、分散性など、考慮すべき点がいくつかあります。データベースに何かを保存している場合は、それを移動できます。繰り返しますが、コンテンツ配信サービスに画像を保存すると、自分自身でネットワーク ヒットを行わないため、はるかに高速になる可能性があります。

それについて考えてみてください。そして、少しのベンチマークが誰にも害を及ぼすことは決してないことを覚えておいてください :-) したがって、通常のデータセット サイズでテストし、同時クエリなどを考慮に入れてください。

于 2010-07-21T23:18:35.047 に答える