Ubuntuサーバーで実行するサイトに予測検索機能(下の例を参照)を追加しました。これは、データベースから直接実行されます。各検索の結果をキャッシュし、存在する場合はそれを使用し、存在しない場合は作成します。
潜在的なcira 1000万の結果を1つのディレクトリ内の個別のファイルに保存しても問題はありますか?または、フォルダに分割することをお勧めしますか?
例:
os.listdir
、Pythonのジェネレーターバージョンを作成するための機能要求は、この理由で完全に拒否されました。
Ubuntuサーバーで実行するサイトに予測検索機能(下の例を参照)を追加しました。これは、データベースから直接実行されます。各検索の結果をキャッシュし、存在する場合はそれを使用し、存在しない場合は作成します。
潜在的なcira 1000万の結果を1つのディレクトリ内の個別のファイルに保存しても問題はありますか?または、フォルダに分割することをお勧めしますか?
例:
os.listdir
、Pythonのジェネレーターバージョンを作成するための機能要求は、この理由で完全に拒否されました。
回答:
1つのディレクトリ内の個別のファイルに約1,000万件の結果を保存することに問題はありますか?
はい。おそらくもっと多くの理由がありますが、これらは私の頭上から投稿できます:
tune2fs
というオプションdir_index
があり、デフォルトで有効になる傾向があり(Ubuntuでは)、パフォーマンスが低下する前にディレクトリに約10万個のファイルを保存できます。それは、あなたが考えている10mファイルにさえ近くありません。
ext
ファイルシステムには、固定最大数のiノードがあります。すべてのファイルとディレクトリは1つのiノードを使用します。df -i
パーティションとiノードを無料で表示するために使用します。iノードが不足すると、新しいファイルやフォルダを作成できません。
などのコマンドはrm
、ls
ワイルドカードを使用するときにコマンドを展開し、「引数リストが長すぎます」で終了します。find
ファイルを削除または一覧表示するために使用する必要があります。そしてfind
、遅くなる傾向があります。
または、フォルダに分割することをお勧めしますか?
はい。確実に。基本的に、1つのディレクトリに10mのファイルを保存することさえできません。
データベースを使用します。Webサイト用にキャッシュする場合は、「solr」(「分散インデックス作成、複製、および負荷分散クエリの提供」)をご覧ください。
同じ問題で終わった。独自のベンチマークを実行して、すべてを同じフォルダーに配置できるか、複数のフォルダーを使用できるかを確認してください。できるように見え、高速です!
参照:https : //medium.com/@hartator/benchmark-deep-directory-structure-vs-flat-directory-structure-to-store-millions-of-files-on-ext4-cac1000ca28
バイナリ検索は数百万のレコードを簡単に処理できるため、単一のディレクトリを検索しても問題はありません。非常に高速に実行されます。
基本的に、32ビットシステムを使用している場合、2Gbレコードまでのバイナリ検索は簡単で適切です。
オープンソースソフトウェアであるDBは、完全な結果を1つのエントリに簡単に保存し、検索を組み込むことができます。