400,000以上のファイルを含むディレクトリがあります。ディレクトリには、最大30,000,000個のファイルが簡単に含まれる可能性があります。
それは良いアイデアですか、このような小さなディレクトリに切り刻むべきですか?
/images/1/
/images/2/
/images/3/
/images/4/
etc.
小さいディレクトリをどのサイズにする必要がありますか?各ディレクトリに100,000個のファイルがあるとよいでしょうか?
これを試してみます。
ファイルシステムの観点から:
FAT32 :
- 最大ファイル数:268,173,300
- ディレクトリごとの最大ファイル数:216-1(65,535)
- 最大ファイルサイズ:2 GiB-1なし LFS 、4 GiB-1あり
NTFS :
- ファイルの最大数:232-1(4,294,967,295)
- 最大ファイルサイズ
- 実装:244-26 バイト(16 TiB-64 KiB)
- 理論的:264-26 バイト(16 EiB-64 KiB)
- 最大ボリュームサイズ
- 実装:232-1クラスター(256 TiB-64 KiB)
- 理論的:264-1クラスター
ext2 :
- ファイルの最大数:1018
- ディレクトリごとの最大ファイル数:〜1.3×1020 (10,000を超えるパフォーマンスの問題)
- 最大ファイルサイズ
- 16 GiB(ブロックサイズ1 KiB)
- 256 GiB(2 sizeKiBのブロックサイズ)
- 2 TiB(ブロックサイズ4 KiB)
- 2 TiB(ブロックサイズ8 KiB)
- 最大ボリュームサイズ
- 4 TiB(1 sizeKiBのブロックサイズ)
- 8 TiB(ブロックサイズ2 KiB)
- 16 TiB(ブロックサイズ4 KiB)
- 32 TiB(ブロックサイズ8 KiB)
ext :
- ファイルの最大数:min(volumeSize/213、numberOfBlocks)
- 最大ファイルサイズ:ext2と同じ
- 最大ボリュームサイズ:ext2と同じ
ext4 :
- ファイルの最大数:232-1(4,294,967,295)
- ディレクトリごとの最大ファイル数:無制限
- 最大ファイルサイズ:244-1バイト(16 TiB-1)
- 最大ボリュームサイズ:248-1バイト(256 TiB-1)
参照:
https://stackoverflow.com/questions/466521/how-many-files-can-i-put-in-a-directory
機能の観点から:
Linuxでは、ファイルが多すぎるディレクトリがある場合、シェルはワイルドカードを展開できない場合があることに注意してください。 Linuxでホストされているフォトアルバムでこの問題が発生しています。サイズ変更されたすべての画像を単一のディレクトリに保存します。ファイルシステムは多くのファイルを処理できますが、シェルは処理できません。
サーバーの速度の観点から:
1つのディレクトリ内のファイルが多すぎると、ロード時間が数秒増加する可能性があります。ディレクトリが多すぎると、ロード時間が長くなる可能性があります。 (サーバーの仕様がこれに影響します)
SEOの観点から
セキュリティ上の理由で適切な画像名がないことは理解できます(ユーザーが写真をアップロードし、適切に書き換えていると仮定します)。しかし、検索ランキングを改善し、URLサーバー上の別の場所に移動します。 (すなわち、写真/屋外/風景/山)
最終的には誰もがすべてに適合するわけではありませんが、前述のことに基づいてより良い情報に基づいた決定を下すことができます。
Ext3およびext4 Linuxに何万ものファイルを含むディレクトリを作成しようとしました。最終的に、それらのファイルをリストするのは法外に費用がかかるようになります。 ls
が完了するまで数秒かかる場合があります。
ディレクトリごとに最大10,000ファイルの設計を試みます。
その方法の1つは、ファイル名の最初の数文字をディレクトリとして使用することです。 gitソース管理システムはこのアプローチを採用しています。 なぜgitはオブジェクトをハッシュの最初の2文字でディレクトリに保存するのですか? を参照してください。 Gitは、ディレクトリごとのハッシュリビジョンの数を6700に制限します。