私は約1000万までのたくさんのファイルを保存する必要があるアプリを書いています。
現在、UUIDで名前が付けられており、それぞれ約4MBになりますが、常に同じサイズになります。これらのファイルとの間の読み取りと書き込みは常に順次に行われます。
私が答えを求めている2つの主な質問:
1)これに最適なファイルシステムはどれか。 XFSまたはext4? 2)単一のディレクトリ内のファイルの数を減らすために、サブディレクトリの下にファイルを保存する必要がありますか?
質問2については、1つのディレクトリに保存できるファイル数のXFS制限を見つけようとしましたが、数百万を超える制限は見つかりませんでした。彼らは、パフォーマンスの問題はないと述べました。 ext4の下ではどうですか?
同様のことをしている人々を探し回って、パフォーマンスのためにファイル名ではなくファイルへのリンクとしてiノード番号を保存することを提案する人もいました(これはデータベースインデックスにあります。私も使用しています)。ただし、iノード番号でファイルを開くために使用できるAPIが表示されません。ちなみに、これは、ext3でのパフォーマンスを改善するための提案であるように思われました。
Ext4とXFSの制限は何ですか?どちらか一方からどのようなパフォーマンス上の利点がありますか?私の場合、XFSではなくext4を使用する理由がわかりますか?
あなたは間違いなくサブディレクトリにファイルを保存する必要があります。
EXT4とXFSはどちらもファイル名に効率的なルックアップ方法を使用しますが、ls
やfind
などのディレクトリに対してツールを実行する必要がある場合は、ファイルを管理可能なチャンクに入れておくと非常に便利です。 1,000〜10,000ファイル。
Iノード番号は、EXTファイルシステムのシーケンシャルアクセスパフォーマンスを向上させることです。メタデータはiノードに格納され、これらのiノードに順不同でアクセスすると、メタデータアクセスはランダム化されます。 iノードの順序でファイルを読み取ることにより、メタデータアクセスもシーケンシャルにします。
最新のファイルシステムでは、必要に応じて、1,000万個のファイルをすべて同じディレクトリに保存できます。しかし、ツール(lsとその友人)はうまく機能しません。
単一レベルのディレクトリ、固定数、おそらく1,000個のディレクトリを配置し、そこにファイルを配置することをお勧めします(10,000ファイルはシェルおよび「ls」で許容されます)。
多くのレベルのディレクトリを作成するシステムを見てきましたが、これは本当に不要で、iノードの消費量が増え、トラバーサルが遅くなります。
10Mファイルは、一括操作を行う必要がない限り、実際には問題にはなりません。
古いファイルを整理する必要があると思いますが、「tmpwatch」のようなものはおそらく1,000万個のファイルで問題なく動作します。