パフォーマンスにとって何が良いですか?1つのディレクトリに多くのファイルがありますか、それともそれぞれが1つのファイルを持つ多くのサブディレクトリですか?

ioleo

Webアプリケーションを構築する際、データベースエントリに関連付けられたファイルがあることがよくあります。たとえば、userテーブルがあり、各カテゴリには、avatar関連付けられた画像へのパスを保持するフィールドがあります。

ファイル名に競合がないことを確認するには、次のいずれかを実行できます。

  • にアップロード時にファイルの名前を変更しますID.jpgその場合、パスは/user-avatars/ID.jpg
  • または、エンティティごとにサブディレクトリを作成し、元のファイル名をそのまま残します。その場合、パスは/user-avatars/ID/original_filename.jpg

ここで、IDはのusers一意のID番号です。

どちらも、アプリケーションロジックの観点からは完全に有効です。

しかし、ファイルシステムのパフォーマンスの観点から、どちらが優れているでしょうか?categoryエントリの数が非常に多くなる可能性があることに注意する必要があります(数百万)。

ディレクトリが保持できるサブディレクトリの数に制限はありますか?

aleatha

ファイルシステムによって異なりますが、ext3のような単純なものについて話していて、分散ファイルシステムを実行していないと仮定します(そのうちのいくつかは非常に優れています)。一般に、ファイルシステムは、それらのエントリがディレクトリであるかファイルであるかに関係なく、単一のディレクトリ内の特定の数のエントリでパフォーマンスが低下します。したがって、イメージごとに1つのディレクトリを作成する場合でも、ルートディレクトリに1つのイメージを作成する場合でも、スケーリングの問題が発生します。あなたがこの答えを見れば:

ディレクトリ内のファイルの数が多すぎますか(WindowsおよびLinuxの場合)?

ext3は、ディレクトリ内の約32Kエントリで制限に達し、提案しているよりもはるかに少ないことがわかります。

頭のてっぺんから、/ user-avatars / 1/2/12345 /original_filename.jpgのようなマルチレベルのディレクトリツリーに基本的なシャーディングを行うことをお勧めします。(または、IDのタイプに適したものですが、質問は数値IDに関するものと解釈しています。)これを行うと、ディレクトリを分散できるため、後でストレージクラスター全体に分散することを決定したときにも作業が楽になります。周り。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ