質問: ### Linuxで大量のファイルを速く参照するディレクトリ構造とは? CentOSのWebサーバーで、大量の商品画像ファイルを保存しています。 画像ファイルをなるべく速く表示するためには、どのようなディレクトリ構造に保存すれば良いのか?検討しています。 * 100万個程度の画像ファイルを保存する。 * 「0」~「9」の10個のディレクトリを作り、4階層の入れ子にして、10×10×10×10=10000個の保存場所を作る。(例) /img/1/2/3/4/A.jpg (パターンA) * 「00」~「99」の100個のディレクトリを作り、2階層の入れ子にして、100×100=10000個の保存場所を作る。(例) /img/01/02/B.jpg (パターンB) * 画像ファイルの書き込み(追加・更新)の頻度は少なく、読み出しの頻度が高い。 Linuxのファイルシステム(CentOSのext4やXFS等)では、上記の パターンA:ディレクトリ数を少なくして、階層を深くする パターンB:ディレクトリ数を多くして、階層を浅くする では、どちらが読み出しが速くなるでしょうか? 将来的に画像ファイル数が1億個とかに増えたとき、パフォーマンス低下の問題に直面すると予想しております。 他の方がどのような工夫や改善に取り組んでいるのか?知りたく質問いたしました。 ヒントや参考情報を御教示いただけますと幸甚です。よろしくお願いします。
回答: Squidのキャッシュは2階層になっていてデフォルトは1階層目16×2階層目256ぐらいだったと思います。 100万個であれば250/ディレクトリぐらいです。1000万個だとまだ大丈夫そうですが、1億だとちょっと考える数になります。 1億を想定しなければならないのであれば(リクエストそのものも当然増えるでしょうから)単一サーバで耐えられるかというところから検討が必要です。外部のサービスに頼るのも選択肢ですが、何も考えなくていいというようなものではありません。自前で作ることによるリスクはなくなるのではなく課金に変換されているだけですので、十分検討が必要です。