質問

約2k〜5kのサイズで100万+写真を保存する必要があるASP.NET MVCサイトを作成しています。以前のRessearchから、ファイルサーバーはおそらくDBよりも優れているように見えます(他の方法ではコメントしてください)。

この多くのファイルを保存する際に考慮すべき特別なことはありますか? 1つのフォルダーに非常に多くのファイルがある場合、Windowsが写真をすばやく見つけることができることに問題はありますか?セグメント化されたディレクトリ構造を作成する必要があります。たとえば、ファイル名で分割しますか?潜在的な将来の拡張ニーズのために、ソリューションが少なくとも1,000万枚の写真に拡大する場合、それは素晴らしいことです。

役に立ちましたか?

解決

4KBは、NTFSのデフォルトのクラスターサイズです。通常の画像サイズに応じて、この設定をチューニングする場合があります。http://support.microsoft.com/kb/314878

サブディレクトリを備えた木を構築して、あるFSから別のFSに移動できるようになります。 ディレクトリにいくつのファイルを配置できますか?そして、いくつかの問題を避けてください: http://www.frank4dd.com/howto/various/maxfiles-per-dir.htm

また、関連する写真を含むアーカイブを使用して、1つのファイルのみを開くだけでロードすることもできます。 Thosesアーカイブは圧縮される可能性があります。ボトルネックはI/Oで、CPUの場合は圧縮されていません。

DBはメンテナンスが簡単ですが、遅いです...だからあなた次第です!

他のヒント

参照してください このサーバー障害の質問 ディレクトリ構造に関するいくつかの議論のために。

問題は、ファイルシステムがディレクトリにそれほど多くのファイルを保存できないことではなく、Windowsエクスプローラーを使用してそのディレクトリにアクセスする場合は永遠にかかるため、そのフォルダーに手動でアクセスする必要がある場合はセグメント化する必要があります。たとえば、2〜3個の各文字/番号の番号/番号またはより深い構造ごとにディレクトリがあります。

それを1Kファイルで1Kフォルダーに分割できる場合、それぞれが十分に大きくなり、それを行うコードは非常に簡単です。

NTFを想定すると、ボリュームあたり40億ファイルの制限があります(2^32-1)。これは、ボリューム上のすべてのフォルダー(オペレーティングシステムファイルなどを含む)の合計制限です

単一のフォルダー内の多数のファイルは問題ではないはずです。 NTFSは、B+ツリーを使用して高速検索に使用します。 Microsoftは、ショートファイルの名前の生成を無効にすることを推奨しています(mypictureofyou.htmlをmypic〜1.htmとして取得できる機能)。

それらを複数のディレクトリにセグメント化することにパフォーマンスの利点があるかどうかはわかりません。私の推測では、NTFSは大規模なディレクトリでのパフォーマンスのために設計されたため、利点はありません。

それらを複数のディレクトリにセグメント化することにした場合、ファイル名のハッシュ関数を使用してディレクトリ名を取得します(たとえば、ディレクトリ名がファイル名の最初の文字であるのではなく)。ファイルの。

コンテンツ配信ネットワークの使用を除外しません。彼らはこの問題のために設計されています。 Amazon S3で大成功を収めました。 Microsoftベースのソリューションを使用しているため、おそらくAzureが適している可能性があります。

サードパーティのソリューションの使用を妨げる要件はありますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top