数千のドキュメントをhundretsに効率的に保存する方法は?
-
09-10-2019 - |
質問
私は多くのドキュメント(PDFS、Wordファイルなど)を保存する必要があるシステムに取り組んでいます。Solr/Luceneを使用して、それらのドキュメントから抽出された啓示的な情報を検索しますが、オリジナルを保存する場所も必要ですユーザーが開く/ダウンロードできるようにファイル。
私はいくつかの可能性について考えていました:
- ファイルシステム - おそらく1Mドキュメントを保存するのはそれほど良い考えではありません
- SQLデータベース - ただし、バイナリドキュメントとそのIDのみを保存する必要があるため、リレーショナル機能のほとんどは必要ありません。これは最速のソリューションではない可能性があります
- no -sqlデータベース - それらには満足度がないので、それらも良いかどうかはわかりません。
私が探しているストレージは次のとおりです。
- 速い
- スカラブル
- オープンソース(重要ではありませんが、持っているのはいいことです)
これらのファイルを保存するための最良の方法は、あなたの意見であることをお勧めしますか?
解決
ファイルシステムは、名前が示すように、効率的でスケーラブルな方法で多数のファイルを保存するように設計および最適化されています。
他のヒント
Facebookは多くのファイル(150億枚の写真)を保存しているため、フォローできます。
- 彼らは当初、商業用ストレージアプライアンスが提供するNFS共有から始めました。
- その後、彼らはHayStackと呼ばれるONW実装HTTPファイルサーバーに移動しました
詳細を知りたい場合は、これがFacebookのメモです http://www.facebook.com/note.php?note_id=76191543919
NFS共有に関して。 NFS共有は通常、パフォーマンス上の理由で1つのフォルダーのファイルの量を制限することに留意してください。 (これは、最近のすべてのファイルシステムがB-Treeを使用して構造を保存すると仮定すると、少し直感的になる可能性があります。)したがって、(NetApp)のようなComercial NFS共有を使用している場合は、ファイルを複数のフォルダーに保持する必要があります。
ファイルに何らかのIDがある場合は、それを行うことができます。 ASCII表現を少数の文字のグループに分割し、各グループのフォルダーを作成します。たとえば、IDSに整数を使用するため、ID 1234567891のファイルはストレージ/0012/3456/7891として保存されます。
それが役立つことを願っています。
私の意見では...
ファイルをディスク(ファイルシステム)に圧縮して保存し、データベースを使用してそれらを追跡します。
これが唯一の仕事である場合、SQLiteを使用してください。
ファイルシステム:全体像について考えている間、DBMはファイルシステムを再度使用します。ファイルシステムはファイルを保持するために専用であるため、最適化を確認できます(Lukehが述べたように)