4

パフォーマンスと効率の観点から、多数の小さなファイル(ロットでは数百万ものことを意味します)を使用するのが良いですか、それとも数個(10個程度)の巨大な(数ギガバイト)ファイルを使用するのが良いですか?私がデータベースを構築しているとしましょう(完全に真実ではありませんが、重要なのは、データベースがLOTにアクセスされることです)。

私は主に読み取りパフォーマンスに関心があります。私のファイルシステムは現在Linux(重要な場合はUbuntu Server Edition)でext3ですが、まだ切り替えることができる位置にいるので、異なるファイルシステム間の比較は素晴らしいでしょう。技術的な理由から、これに実際のDBMSを使用することはできません(したがって、質問です)。したがって、「MySQLを使用する」というのは良い答えではありません。

よろしくお願いします。具体的にする必要がある場合はお知らせください。


編集:私は比較的小さなデータをたくさん保存するつもりです。そのため、たくさんの小さなファイルを使用する方が簡単です。したがって、いくつかの大きなファイルを使用する場合、一度に取得するのはそれらのファイルから数KBだけです。私もインデックスを使用しているので、それは実際には問題ではありません。また、一部のデータは他のデータを指します(多くの小さなファイルの場合はファイルを指し、大きなファイルの場合はファイル内のデータの場所を指します)。

4

5 に答える 5

5

ここには多くの前提条件がありますが、すべての目的と目的で、大きなファイルを検索する方が、多数の小さなファイルを検索するよりもはるかに高速です。

テキストファイルに含まれるテキストの文字列を探しているとしましょう。1TBのファイルを検索する方が、 1,000,000MBのファイルを開いてそれらを検索するよりもはるかに高速です。

ファイルを開く操作には時間がかかります。大きなファイルは一度だけ開く必要があります。

また、ディスクのパフォーマンスを考慮すると、単一のファイルは、多数の一連のファイルよりも連続して保存される可能性がはるかに高くなります。

...繰り返しになりますが、これらは特定のアプリケーションについて詳しく知らない一般化です。

于 2009-06-26T21:30:50.237 に答える
3

ここでのTMOの主な問題は、インデックス作成に関するものです。適切なインデックスのない巨大なファイルで情報を検索する場合は、ファイル全体をスキャンして、長い可能性のある正しい情報を探す必要があります。強力なインデックス作成メカニズムを構築できるとお考えの場合は、巨大なファイルを使用する必要があります。

このタスクをext3に委任したいのですが、これはかなり得意なはずです。

編集 :

ext3に関するこのウィキペディアの記事によると考慮すべきことは、断片化は時間の経過とともに発生するということです。したがって、ファイルシステムのかなりの割合を占める多数の小さなファイルがある場合、時間の経過とともにパフォーマンスが低下します。

この記事はまた、ディレクトリ制限あたり約32kファイルの主張を検証します(ウィキペディアの記事が何でも検証できると仮定します)

于 2009-06-26T21:29:58.037 に答える
3

場合によります。本当。さまざまなファイルシステムがさまざまな方法で最適化されますが、一般に、小さなファイルは効率的にパックされます。大きなファイルを使用する利点は、多くのものを開いたり閉じたりする必要がないことです。開閉は時間がかかる操作です。大きなファイルがある場合は、通常、一度だけ開いたり閉じたりして、シーク操作を使用します

たくさんのファイルの解決策を選ぶなら、私はあなたに次のような構造を提案します

b/a/bar
b/a/baz
f/o/foo

ディレクトリ内のファイル数に制限があるためです。

于 2009-06-26T21:31:46.020 に答える
2

Ext3にはディレクトリあたり約32000ファイル/サブディレクトリの制限があると思います。何百万ものファイルをルーティングする場合は、それらを多くのディレクトリに分散させる必要があります。それがパフォーマンスにどうなるかわかりません。

私の好みは、いくつかの大きなファイルです。実際、論理的に分離されたユニットでない限り、なぜいくつかあるのでしょうか。分割するためだけに分割している場合は、分割しないでください。Ext3は非常に大きなファイルを問題なく処理できます。

于 2009-06-26T21:30:21.267 に答える
1

LinuxのXFSファイルシステムに最大約500万のファイルを保存するシステムを使用していますが、パフォーマンスの問題は発生していません。ファイルはデータの保存にのみ使用し、フルスキャンすることはありません。検索用のデータベースがあり、テーブルのフィールドの1つに取得に使用するGUIDが含まれています。上記のように正確に2つのレベルのディレクトリを使用し、ファイル名はGUIDですが、ファイルの数がさらに増えると、さらに多くのレベルを使用できます。このアプローチを選択したのは、データベースに数テラバイト余分に保存する必要がなく、保存/返却するだけで検索する必要がなく、うまく機能したためです。私たちのファイルの範囲は1kから約500kです。

また、ext3でシステムを実行しましたが、正常に機能しましたが、約100万ファイルを超えてプッシュしたことがあるかどうかはわかりません。ディレクトリあたりの最大ファイル数の制限により、おそらく3ディレクトリシステムに移動する必要があります。

于 2009-06-27T02:25:20.127 に答える