Linuxファイルシステムに数百万のテキストファイルを保存し、圧縮して任意のコレクションをサービスとして提供できるようにします。キー/値データベースのような他のソリューションを試しましたが、並行性と並列性の要件により、ネイティブファイルシステムを使用することが最良の選択です。
最も簡単な方法は、すべてのファイルをフォルダーに保存することです。
$ ls text_files/
1.txt
2.txt
3.txt
これは、フォルダ内のファイル数に制限のないEXT4ファイルシステムで可能です。
2つのFSプロセスは次のとおりです。
- Webスクレイプからテキストファイルを書き込みます(フォルダー内のファイルの数に影響されません)。
- ファイル名のリストで指定された、選択したファイルを圧縮します。
私の質問は、1つのフォルダーに最大1,000万個のファイルを保存すると、上記の操作のパフォーマンスや一般的なシステムパフォーマンスに影響しますか?
ls -l
か、何か他stat
のディレクトリ内のすべてのiノード(例えばねbash
、人工的に速くなりますグロブ/タブ補完を)いくつかの消耗の後(いくつかのファイルを削除し、いくつかの新しいファイルを書き込みます)よりも。これは、XFSがext4の方がXFSよりも優れている可能性があります。XFSがiノードとデータに動的にスペースを割り当てるため、iノードがより多く散らばってしまうためです。(しかし、それは非常に少ない詳細な知識に基づいた純粋な推測です;私はかろうじてext4を使用しました)。abc/def/
サブディレクトリに移動します。
ZipOutputStream
作成するJavaサーブレットでさえ、無料のLinuxネイティブファイルシステムのほとんどに勝ると思います。IBMのGPFSに支払いたいとは思いません。JDBC結果セットを処理してzipストリームを作成するループは、おそらく6〜8行のJavaコードです。
dir_index
、多くの場合デフォルトで有効になり、検索が高速になりますが、ディレクトリごとのファイル数が制限される場合があります。