web-dev-qa-db-ja.com

ext4ファイルシステムのディレクトリに多くのファイルがあるとどうなりますか?

私の仕事は、JSONのリストを(データベースを使用せずに)ディスクに保存することであり、次のオプションがあります。

  • それらを単一の大きなファイルに保存します。

  • IDをキーとして、別々のファイルに保存します。

個人的には、他のJSONに触れることなく、IDでJSONを直接アドレス指定できる2番目のオプションを好みます。ただし、ほぼ10万から100万のJSONエントリがあり、基盤となるファイルシステム(私の場合はext4)に悪影響が及ぶ可能性があることを恐れています。

  • これは、(ディレクトリ内またはファイルシステム全体の)ファイル数に関するファイルシステムの制限を超えますか?

  • これにより、特定のIDの取得中に速度が低下しますか?

    具体的には、ディレクトリの下にあるファイルのリストは、ディレクトリのiノード構造によって維持されていると思いますが、ファイルリストを保持するためにどのデータ構造(リストまたはマップ)を使用しているかはわかりません。ディレクトリの階層を使用すると、ルックアップでパフォーマンスが向上しますか?たとえば、put 0123456789.jsonからroot/01/0123456789.json の代わりに root/0123456789.json

2
Cyker

1つのディレクトリに100万個のファイルがあると処理速度が低下しますが、100万個のエントリを持つ集約JSONを解析することになります。最善の策は確かにハッシュディレクトリを使用することですが、おそらく1つではなく2つのレベルを深くしたいと思うでしょう。つまり、0123456789.json in root/0/01/0123456789.json、および987654321.json in root/9/98/987654321.json

4
Satō Katsura