ユーザーごとに画像を保存します。ただし、潜在的に多くのユーザーがいることを考えると、それほど単純ではないかもしれません。
ユーザーファイルのアップロードは、ユーザー固有のファイルのアップロードです。これらのファイルを管理する場合、多くの場合、ユーザーごとにさまざまな手順を適用する必要があります。例:1)ユーザーアカウントを削除して関連するすべてのファイルを削除する、2)ユーザーが使用するスペースの量を計算する、3)ユーザーがアップロードしたすべてのファイルを一覧表示するなど。
これらのファイルをさまざまなディレクトリに分散させると、上記の手順を効率的に実装することがはるかに困難になります。
100.000人を超えるユーザーがいる可能性があることを指定しました。ファイルシステムによっては、これが原因で問題が発生する可能性があります。たとえば、ext3では、ディレクトリごとに最大32Kのサブディレクトリがあります。これは、ユーザーごとにディレクトリ内のファイルを整理する場合に問題になる可能性があります(「ディレクトリにいくつのファイルを配置できますか?」を参照)。
ディレクトリ内に32Kを超えるファイルまたはディレクトリを保存できないと仮定すると、この制限を回避する方法を見つける必要があります。たとえば、ユーザー名の最初の文字に応じて、ユーザーフォルダをいくつかのサブディレクトリに分割できます(他のすべての開始文字にサブディレクトリを追加します)。
users
a
aaron
...
b
bertie
...
...
misc
_foobar
...
@jack
...
100000/25=4000
これで、ディレクトリごとに大まかにユーザーがいるだけになります。これは、指定された32K未満です。
既成概念にとらわれずに考えると、フラットなファイルシステムに画像をファイルとして保存するのは正しい選択ではないかもしれません。多数のファイルを保存および処理するために特別に作成されたデータベースシステムがあります。たとえば、MongoDBのGridFSを取り上げます。これは非常に効率的で、多数のファイルに拡張でき、ファイルシステムの正しい使用法などの下位レベルの問題もすべて処理します。MS SQLには、ファイルをNTFSファイルシステムに保存するのに特に適したFILESTREAMストレージがあります。