31

私は約1000万までのたくさんのファイルを保存する必要があるアプリを書いています。

それらは現在UUIDで名前が付けられており、それぞれ約4MBになりますが、常に同じサイズになります。これらのファイルの読み取りと書き込みは常に順次行われます。

私が答えを求めている2つの主な質問:

1)これに最適なファイルシステムはどれか。XFSまたはext4?2)単一のディレクトリ内のファイルの数を減らすために、サブディレクトリの下にファイルを保存する必要がありますか?

質問2については、1つのディレクトリに保存できるファイル数のXFS制限を見つけようとしましたが、数百万を超える制限を見つけられなかったことに注意してください。彼らはパフォーマンスの問題はないと述べた。ext4の下ではどうですか?

同様のことをしている人たちと一緒に調べて、パフォーマンスのためにファイル名ではなくファイルへのリンクとしてiノード番号を保存することを提案する人もいました(これはデータベースインデックスにあります。私も使用しています)。ただし、iノード番号でファイルを開くために使用できるAPIが表示されません。ちなみに、これは、ext3でのパフォーマンスを改善するための提案であるように思われました。

ext4とXFSの制限は何ですか?どちらか一方からどのようなパフォーマンス上の利点がありますか?私の場合、XFSよりもext4を使用する理由を理解できますか?

4

2 に答える 2

21

あなたは間違いなくサブディレクトリにファイルを保存する必要があります。

EXT4とXFSはどちらもファイル名に効率的なルックアップ方法を使用しますが、などのディレクトリに対してツールを実行する必要がある場合は、1,000〜10,000ファイルの管理可能なチャンクにファイルを配置できればls非常findにうれしく思います。

iノード番号は、EXTファイルシステムのシーケンシャルアクセスパフォーマンスを向上させることです。メタデータはiノードに格納され、これらのiノードに順不同でアクセスすると、メタデータアクセスはランダム化されます。iノードの順序でファイルを読み取ることにより、メタデータアクセスもシーケンシャルにします。

于 2011-02-16T18:35:57.830 に答える
11

最新のファイルシステムでは、必要に応じて、1,000万個のファイルをすべて同じディレクトリに保存できます。しかし、ツール(lsとその友人)はうまく機能しません。

単一レベルのディレクトリ、固定数、おそらく1,000個のディレクトリを配置し、そこにファイルを配置することをお勧めします(10,000ファイルはシェル、および「ls」で許容されます)。

多くのレベルのディレクトリを作成するシステムを見てきましたが、これは本当に不要であり、iノードの消費量が増え、トラバーサルが遅くなります。

10Mファイルは、一括操作を行う必要がない限り、実際には問題にはなりません。

古いファイルを整理する必要があると思いますが、「tmpwatch」のようなものはおそらく10Mのファイルで問題なく動作します。

于 2011-02-16T23:17:05.010 に答える