何百万もの小さなファイルのブロックサイズ


10

Debian WheezyのハードウェアRAID1(LSI MegaRaidの可能性があります)に2x 4TBディスクがあります。物理ブロックサイズは4kBです。1億から2億の小さなファイル(3〜10kB)を保存します。私はパフォーマンスを求めているのではなく、ストレージを節約するための最適なファイルシステムとブロックサイズを求めています。8200バイトのファイルをブロックサイズ4kBのext4にコピーしました。これには32kBのディスクが必要でした!?その理由はジャーナリングですか?では、そのような小さなファイルのためにほとんどのストレージを節約するには、どのようなオプションがありますか?


回答:


1

私がそのような状況にあった場合、すべてのデータを個別のファイルとしてではなく、コンパクトなオフセットベースのインデックスを持つ単一のファイルに格納できるデータベースを検討しているでしょう。おそらく、必要なときにファイルとして操作できるFUSEドライバがあり、実際にはすべてが個別のファイルではないデータベースがあります。

あるいは、たとえば、ファイルサイズの60〜70パーセンタイルを見て、そのファイルサイズをディスク上の個別のブロックとしてではなく、ファイルシステムツリーノードに直接当てはめることもできます。各ノードに10kを保存することはおそらく大きな問題ですが、ファイルの60%〜70%をそこに入れることができれば、それはおそらく大きな勝利でしょう。

特定のファイルシステムだけがそれを行うことができます(reiserfsは1つです)。それはすべて、パーセンタイルがどのサイズか、ツリーに収まるかどうかに依存すると思います。あなたはそれを調整することができるかもしれません。残りを1つのブロックに収めようと思います。

ジャーナルについては心配しないでください。いずれにせよ、それらには上限サイズがあります。


4
いやいやいやいやいやいやいやいやいや…ただあなたの最初の段落にいいえ。私は何年も前にこの間違いを犯しましたが、後で取り消す必要がありました。このデザインパターンを使用するシステムも継承しています。ファイルをファイルシステムに含めるか、妥協として、SQL ServerのFileStreamオブジェクトに含める必要がある場合、それらを組み合わせる必要があります(したがって、FUSEドライバーであっても、それだけではありません)。1つのフォルダに400万個のファイルを置かないようにするなど、ファイルシステムで作業する際には他にも考慮事項があります(私もその間違いを犯しました)。
Mark Henderson

2
@MarkHendersonしかし、問題はファイルであるべきものとレコードであるべきものを定義することです。これ以上の詳細情報が提供されていないと、何億もの小さなものがレコードのように聞こえます。彼が現在それらをファイルとして持っているからといって、それが彼らがそのままでいる必要がある、またはそうであったはずであるということを意味するのではありません。また、ジョブにSQL Serverを使用することをお勧めします;)

2
5年前、私は1つのフォルダーに100万個のファイルがあり、毎日約10,000個の新しい1〜4KBのファイルがあるシステムを継承しました。それらすべてをISAMテーブルに入れることにしました。「ねえ、それらは分析用のプレーンテキストにすぎません!」そして、それが大きな間違いであることが判明しました。これは、処理された後、ほとんど何も実行していなかった数十億行の単一の12GBテーブルがあったためです そこで、ファイル名のGUIDに基づいて、それらを階層型フォルダーのあるファイルシステムに配置することに切り替えました。
Mark Henderson

(なぜsqullion行を含む単一の12GBテーブルが問題だったのかは、ここでは説明しませんが別の問題でした)
Mark Henderson

2
@MarkHenderson:それは別の問題ではありません、それはあなたがそれが間違った解決策であると言った理由です(「...私は今数十億行の単一の12GBテーブルを持っているので...巨大な間違い...」)。間違ったデータベースエンジン/テーブル形式を選択しましたが、INDEXを使用して多数の小さなものを単一のファイルに入れるという概念は、正しく実行する限り、適切です。必要なのは、自動シャーディングを使用して、何百万もの小さなオブジェクトのキー/バリューストアに優れたデータベースです。また、彼は特にパフォーマンスだけを気にしているのではなく、スペースを気にしていることにも注意してください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.