2009-07-03 7 views
4

ASP.Netの店舗実装(単純なものから)を柔軟性の高い構造にアップグレードするだけです。私はちょうど製品に関連する画像を保存する方法をいくつかのオプションを探しています。 (画像の2つのタイプ、製品の親指、次に製品のフルビュー画像が存在する)。それは少なくとも百の製品を処理する必要があります。デシベルで
1)店舗の画像 - 画像は
賛否
)がIHTTPハンドラを使用して表示(画像の中に、ストリームにDBから読み込まれている - イメージ自体は次のとおりです。asp.netアプリケーションの画像をどのように保存しますか?

これまでのところ私は約2つの選択肢が考えています我々は
の後ろにコード内で作業しているクラス、ビジネスオブジェクトの一部 - 製品データを維持するために一つの場所
短所
- メモリ消費 - トラフィックの増加我々は、製品データFRを取得するとファイルシステム内のOM他のAPI

2)店の画像 - 画像はリンクとしてページに入れて
賛否
- メモリ上のどれもインパクトそれがセッションに格納されていないとして、アプリのcache.Itは簡単なように使用されますリンク
- なしメモリ消費
短所
は - ファイルシステム内の画像のためのいくつかの命名規則(おそらくいくつかのフォルダ構造)を維持するために必要
- 画像

のより複雑なメンテナンス

他の適切なメカニズムはありますか?あなたは何をアドバイスするのですか?

私は個人的にファイルシステムのイメージを好みますが、2つの別々の場所があるため、イメージを維持するのが難しくなります。

ありがとうございます。 X.

はところで:私は実際にいくつかの段階で、製品はまた、いくつかの動画や、あまりにも表示する必要がある任意の他のメディアを持っていることを想像することができます。この場合、Dbは本当にオプションではありませんか?

答えて

4

私はこれに似たシステムを作った。私の意見では、ページの読み込み速度は他のすべての考慮事項よりも優先されるので、「ディスク上のイメージを格納する」オプションを使用しました。

画像がシステムに追加されると、元の画像がトリミングされ、参照用の表示サイズにリサイズされ、サムネイルも生成されます。 3枚の画像がディスクに保存され、元の画像、表示サイズ、サムネイルが保存されます。それぞれのファイル名に対してGUIDが生成されます。

(商品の一覧を表示すると、サムネイルのみが表示されます)製品を検査すると、そのディスプレイのサイズが表示されます。通常、イメージをもう一度クリックするとフルサイズが表示されます。 )

私はこのように少し見えるデータベーステーブルを持っていました。

ID    int, PK 
FullSizePath  varchar(128) 
DisplaySizePath varchar(128) 
ThumbNailPath  varchar(128) 
OriginalData  BLOB 

は、私は、ファイルサーバ上の事故があったばかり包みデシベルで元のデータを保持し、画像が削除されたので、彼らはすべて再生成することができます。しかし、このデータは、ページリクエスト中にdbから引き出されることはありません。

+0

私も同様の意見があります。私たちはこの方法で行くと思います。 ちょうど私たちがバックアップを使うことができるように、元のイメージをデータベースに保存することはまだ残酷だと思いますか?おそらく –

+2

。バックアップソリューションによって異なります。私たちのWebサーバー上のファイルはバックアップされていません。代わりにソース管理に存在します。しかし、私たちのデータベースは夜間にバックアップされているので、dbのようなオリジナルを維持する方がより意味がありました。 – Kirschstein

+1

私は最近、同様のAPIを実装しなければなりませんでした。これが、私が検討していた計画を確認しました。しかし、私はイメージを最適化し、サーバー上に複数のサイズを作成することについて考えなかった...それは素晴らしいです!素晴らしいアイデアをありがとう! –

0

私はあなたが何かをカバーしていると思います。メインイメージをfilesystem/dbに保存することができますが、プログラムでサムネイルを生成することができます。

1

私は、両方の混合物が最高だと思う、小さなクリティカルな画像DBの は量やサイズ、ファイルシステムに 好ましく、大型のためであることは、私たちは保存する傾向が働くあなたの例のような事例では

+0

私は両方の方法を混在させると、より多くの問題を引き起こす可能性があります。とにかくコメントをいただきありがとうございます。 –

0

、優れていますその後、ディスク上の画像、およびDBにファイル名を記録しておきます。あなたが製品のデシベルを持っているとき

次に、あなたが見上げると、動的に製品ごとに、あなたのイメージを読み込むことができます。

これはまた、製品を追加/削除/編集するための管理システムをお持ちの場合には非常に便利です。あなたが好きなら

私はそれがあなたの元の2つの提案の間に一種のだと仮定し、あなたも同じディレクトリにこのようにすべての画像を保存することができます。

+0

名前にはどのような規則が使用されていますか? (GUID、またはproductname + index +接尾辞、接頭辞?) リンクが紛失していくつかの問題が発生しましたか?それとも何か他の問題? –

+0

ファイル名とID(さらに幅と高さのような他の情報を含む)を含むイメージテーブルがあるので、すべてのイメージはストアドプロシージャのようなものでIDで参照されます。 イメージ自体の名前を付けて、すべてのサムネイルの前にsmall_を付けますが、ファイル名は変更されません。管理システムからすべて追加された製品の場合、イメージのアップロード部分は重複をチェックします。 イメージGUIDをイメージファイル名に追加する方がいいかもしれませんが、それはしません。製品に対してspを実行すると、リンクされたイメージのファイル名を取得できます。 – RYFN

+0

(申し訳ありませんが、walloftext!)紛失したリンクは私たちにとって問題ではありませんでしたが、データベースを移動したり、テーブルなどでIDをリセットする場合に発生する可能性があります。 実際にはうまく動作しますが、私たちにとって最も弱いリンクは、画像のアップロードとサイズ変更のために使用するコンポーネントです。 すべての製品イメージが同じイメージフォルダにある場合、Webconfigにもパスを保存できます。 – RYFN

0

MS SQL 2008を使用している場合は、FILESTREAM featureのオプションがあります。

ここで要点ですが、あなたは全体のホワイトペーパーをお読みください:

FILESTREAMは、SQL Server 2008の リリースの新機能です。 構造化データを データベースに格納し、関連付けられた構造化されていない (つまりBLOB)データを というNTFSファイルシステムに直接格納することができます。 は、 の高性能Win32®ストリーミング APIを使用して、 のBLOBデータにアクセスすることができます。これは、SQL Serverを通じてBLOB データにアクセスする場合のパフォーマンスペナルティを で支払う必要はありません。

FILESTREAMでも ログのバックアップを使用して FILESTREAMデータのポイントインタイムリカバリが可能、すべての回で、構造および非構造化データ 間取引 の一貫性を維持します。 整合性はSQL Serverによって自動的に に維持され、 は、 アプリケーションでカスタムロジックを必要としません。 (このホワイトペーパーでは、「設定 FILESTREAMガベージコレクション」セクション 以降で より詳細に説明)と同じ 管理要件の多くを持っているデータベースのトランザクション ログの 同等を維持することによってこれを行い FILESTREAMメカニズム。 データベースの トランザクションログと FILESTREAMトランザクションログを組み合わせると、 FILESTREAMと構造化データが トランザクションで正しく回復されます。

関連する問題