この種のことについて、ファイル システムではなくデータベース (必ずしも MySQL ではない) を見たいと思う理由がいくつかあります。
1 つのディレクトリにファイルが増えると速度が低下します
XFS はリソースの割り当てに関して非常に巧妙であると考えられていますが、ほとんどのファイルシステムでは、1 つのディレクトリに多くのファイルがあるほどパフォーマンスが低下します。また、コマンド ラインでそれらを処理することも頭痛の種になります。これ ( http://oss.sgi.com/projects/xfs/datasheet.pdf ) を見ると、ルックアップに関するグラフがあり、ディレクトリごとに 50k までしか上がらず、減少傾向にあります。
オーバーヘッド
ファイルごとに一定量のファイルシステム オーバーヘッドがあります。小さなファイルが多数ある場合、この結果、最終的なストアが肥大化することがあります。
キークリーニング
すべての単語をファイル名に入れても安全ですか? 本気ですか?そこにスラッシュが1つか2つあると、本当にあなたの一日が台無しになります。
NoSQLは良い選択肢かもしれません
これには、MongoDB/Redis のようなものが適しているかもしれません。MongoDB は、最大 16 MB の単一のドキュメントを格納でき、ファイル システムに物を配置することはそれほど難しくありません。15 MB のドキュメントを保存している場合、その制限を快適にするには少し近すぎるかもしれませんが、他のオプションがあります。
これの良いところは、ルックアップのパフォーマンスがすぐにかなり良くなる可能性が高く、後でそうでないことがわかった場合は、クラスターなどを作成してパフォーマンスをスケーリングできることです。このようなシステムはどれも良い仕事をします.ディスク上のファイルをインテリジェントに管理して、優れたパフォーマンスを実現します。
ディスクを使用する場合
保存したい単語の MD5 ハッシュを取得し、これに基づいてファイル名を作成することを検討してください。たとえば、の MD5azpdk
は次のとおりです。
1c58fb66d5a4d6a1ebe5ec9e217fbbf9
これを使用してファイル名を作成できます。
my_directory/1c5/8fb/66d5a4d6a1ebe5ec9e217fbbf9
これにはいくつかの優れた機能があります。
- ハッシュは怖い文字を処理します
- ディレクトリはデータを分散しているため、4096 を超えるエントリを持つディレクトリはありません。
- これは、ルックアップのパフォーマンスが比較的まともであることを意味します
それが役立つことを願っています。