2

ユーザー画像のアップロードと画像のダウンロード/表示をサポートできる必要があります。

ここに私のオプションがあります。

1)画像を SQL データベースに保存します。

私はこれが小さなセットアップで機能するのを見てきました。サイズが大きくなると、DB コストが高くなります。バックアップがより簡単になります。キャッシュまたは CDN を利用できません。

2)ファイル システムにイメージを保存します。 このオプションは、小さなセットアップよりもわずかに大きいセットアップでは扱いにくいと見てきました。膨大な数のファイルがあるディレクトリの管理が困難。ディレクトリにいくつかの画像があり、ディレクトリにはいくつかのディレクトリしか含まれていないことを確認するために、ハッシュアルゴリズムを考え出す必要があります。深いディレクトリ構造を作成するためのウィンドウに制限があるかどうかはわかりません。キャッシュを使用できます。

3)イメージを nosql DB に保存します。 これをそこに投げるだけです。私は NoSql にあまり詳しくありません。

4) Windows Azure ストレージ/Amazon ストレージ。

いくつかのこと。1) お金は重要な要素です。2) Windows が推奨される環境ですが、Linux/Apache ソリューションも問題ありません。

後もう一つ。Facebookは何をしますか?またはします。再度、感謝します。

4

3 に答える 3

2

ハイブリッド ソリューションを使用する必要があります。

実際のバイナリ イメージをファイル システムに保存しますが、イメージ メタデータにはデータベースを使用します。これにより、ファイルを提供するためのより簡単な媒体が提供されます。スケーラビリティと潜在的にファイルの提供速度が可能になると同時に、検索、フィルタリングなどのためのデータベースの速度も得られます。

これを実装するさまざまな方法を見てきました..しかし、一般的にそれらは主キー+ MIMEタイプ+ファイル名/フォルダーに関連付けられたディレクトリです。たとえば/simon-whitehead/albums/stackoverflow/、ファイル名を持つディレクトリ内の写真は1013.jpg、データベース内のテーブルであるため、次のようになります。

Id - 1013
Name - example.jpg
AlbumId - (Stackoverflow album id)
UserId - (my user id)
Lat - 37.81
Long - 144.96
Date - 7/10/2013
Mime type - image/jpeg

タグを画像に結合するジャンクション テーブルがある場合もあります (検索用)。次に、基本的に次のように応答を作成します。

file = getuser(userId).name / getalbum(albumId).name / getimage(imageid).name

編集: Azure を追加したようです。私が働いていたある会社は Azure を使用しており、素晴らしい経験をしたと言えます。しかし、私は見る機会があまりありませんでした..なので、それについてアドバイスすることはできません.

于 2013-10-06T21:59:04.170 に答える
0

プロジェクトが Azure にない場合は、ファイルをファイル システムに保存することをお勧めします。ただし、プロジェクトが既に Azure にある場合は、BLOB のコンテナーを使用してファイルを保存することをお勧めします。ファイルを保存する場所を比較すると、データベースまたはファイル システムのどちらかになります。その答えは、ファイル システムを使用した方が高速であり、イメージが大量にあるためにデータベースが大きくならないためです。

于 2013-10-08T13:39:45.587 に答える
0

車輪を再発明しないでください。

.Net の画像サイズ変更には、考えられるほとんどすべての機能があります。キャッシング、クラウド プラグイン、API、巨大なコミュニティ + 関連サポート。

パフォーマンスを最適化するさまざまな方法があり、あるプロバイダーから別のプロバイダー、たとえば S3 から Azure に切り替えるのは簡単です。機会があれば、その製品(ナゲットパッケージがあります)を見てください。

于 2013-10-07T06:55:20.657 に答える