87

私は新しい Web サイトを開発しており、通常のファイルシステム ストレージと比較して多くの利点があるため、すべてのユーザー アップロードのストレージとして GridFS を使用したいと考えています。

nginx が提供する GridFS のベンチマークは、nginx が提供する通常のファイルシステムほど高速ではないことを示しています。

nginxでベンチマーク

既に本番環境で GridFS を使用している人、または新しいプロジェクトで使用する人はいますか?

4

5 に答える 5

120

私は、立派なトラフィック統計 (1 日あたり約 25,000 人の訪問者) を持つ価格比較 Web サイトの一部であるサーバーの 1 つで、gridfs を使用しています。サーバーには 2 ギガバイトの RAM があまりなく、CPU もそれほど高速ではありません (Core 2 duo 1.8Ghz) が、サーバーには十分なストレージ容量があります: RAID 0 構成で 10Tb (sata)。サーバーが行う仕事は非常に単純です。

価格比較ツールの各製品には画像があり (製品データベースによると約 1,000 万の製品があります)、サーバーの仕事は画像をダウンロードし、サイズを変更し、gridfs に保存し、訪問者のブラウザーに配信することです。 .. グリッドに存在しない場合... または... グリッドに既に保存されている場合は、訪問者のブラウザーに配信します。したがって、これは「従来の cdn スキーマ」と呼ぶことができます。

このサーバーが稼働して以来、このサーバーには 400 万枚の画像が保存され、処理されています。サイズ変更と保存は単純な php スクリプトによって行われますが、確かに、python スクリプトや Java のようなものの方が高速になる可能性があります。

現在のデータサイズ:11.23g

現在の収納サイズ:12.5g

指数 : 5

インデックスサイズ:849.65m

信頼性について : これは非常に信頼性が高いです。サーバーはロードされません。インデックスのサイズは問題ありません。クエリは高速です。

速度について : 確かに、ローカル ファイル ストレージほど高速ではなく、おそらく 10% 遅いですが、画像を処理する必要がある場合でもリアルタイムで使用できるほど高速です。この場合、PHP に大きく依存します。メンテナンスと開発の時間も短縮されました。単一または複数のイメージの削除が非常に簡単になりました。単純な削除コマンドでデータベースにクエリを実行するだけです。もう 1 つの興味深い点: ローカル ファイル ストレージ (数千のフォルダーに数百万のファイル) を使用して古いサーバーを再起動すると、システムがファイルの整合性チェックを実行していたため、何時間もハングすることがあります (これには本当に数時間かかりました...)。gridfs ではこの問題はもうありません。画像は大きな mongodb チャンク (2GB ファイル) に保存されるようになりました。

だから...私の考えでは...はい、gridfsは本番環境で使用するのに十分高速で信頼性があります。

于 2011-04-11T21:44:53.773 に答える
12

前述のように、通常のファイルシステムほど高速ではないかもしれませんが、通常のファイルシステムよりも優れているため、少し速度を犠牲にする価値があると思います.

最終的に、シャーディングを使用すると、通常のファイルシステムと単一ノードとは対照的に、GridFS ストレージが実際により高速なオプションになるポイントに到達する可能性があります。

于 2010-09-05T14:09:09.023 に答える
6

ただし、大規模な DB の修復について注意してください。開発中の新しいシステムで、mongo は正常に終了しませんでした。7TB の GridFS の修復には 130 時間かかるようです。

このため、OpenStack Swift または Ceph への切り替えを検討すると思います。それでも、それまでは良かった。そして、nginx-gridfs モジュールは便利です。

于 2014-02-24T23:00:36.357 に答える
5

mdirolf の nginx-gridfs モジュールは素晴らしく、セットアップもかなり簡単です。すべての絵画を提供するために、 paint.lyで制作に使用していますが、これまでのところ問題はありません。

于 2010-11-26T00:02:58.453 に答える
2

自分が何をしているのかわからない限り、gridfs の使用はお勧めしません。GridFS は、ファイルをチャンクに分割し、ファイルを 2 つのコレクションに格納する単なる抽象化レイヤーです。より多くのファイル - より多くのオーバーヘッド。ファイルがほぼ同じサイズで、32M 程度を超えないことが予想される場合は、正しい方法です。gridfs に大きなファイルを保存しようとしないでください。なんで?

  1. 異なる言語のドライバーは、ファイルの小さな部分を読み取るときに、ファイル全体 (たとえば、チャンク) を読み取る場合があります。
  2. ファイルを変更すると、すべてのチャンクに影響し、データベースの負荷が増加する可能性があります ファイル システムが大きくなっている場合は、gridfs を分割する必要があります。気をつけて!シャーディングの初期化中は一貫性が保証されません!

読み込み済みのプロジェクトを検討している場合は、ファイルをドキュメントに直接読み込むか (サイズが 16M 以下の場合)、別の clusterfs を選択し、ファイル名/inode をロジックにリンクすることを検討してください。

お役に立てれば。

于 2013-02-03T18:33:47.293 に答える