2016-05-16 17 views
2

DB(私の場合はMongoDB)の外に画像(またはバイナリデータ - pdfs、ムービーなど)を保存してパブリックサーバに置くとフォルダは、少なくともより高速にすることができます(エンコード、デコード、その周辺のもの)。サーバサイドフォルダの代わりにMongoDBに直接画像を保存する利点

しかし、このようなオプションがMondoDBにあるので、私はこれを使う利点と、そのアプローチが推奨されているユースケースを知りたいと思います。

答えて

5
  1. 複製:高可用性のレプリカセットを設定するのはかなり簡単です。したがって、1台のマシンがダウンしても、ファイルは引き続き使用できます。これは単純なファイルシステムのためにさまざまな手段で実現することができますが、これによりオーバーヘッドがパフォーマンス上の利点を十分に排除する可能性があります(MongoDBにはかなり高度な内部キャッシュがあります)。さらに、DRBDを設定し、整合性と可用性を確保するためには、MongoDBよりもかなり多くの知識と管理作業が必要です。また、DBの可用性も高くする必要があります。
  2. スケーラビリティ:ファイルが1つのノードの記憶容量を超えた場合、非常に複雑でコストがかかる可能性があります。理論的には垂直方向に拡大縮小することができますが、縮小のために得意な点があり、水平方向に拡大縮小する方が意味があります。しかし、ファイルシステムのアプローチでは、どのファイルがどのノードに配置されているか、どのようにいつどのようにバランスをとるかなどを管理する必要があります。共有された環境にあるMongoDBのGridFSは自動的に、より重要なのは透過的にこれを行います。あなたは車輪を再発明したり維持したりする必要はありません。
  3. メタデータによるクエリ:理論的には、データベースとファイルシステムへのリンクを使用する方法でこれを行うことができますが、GridFSには任意のメタデータとクエリを挿入する手段があります。繰り返しますが、これにより、あなたは車輪を再発明する必要がなくなります。興味深い例として、GridFSでは重複を見つけるのが非常に簡単です:GridFSの各ファイルに対してハッシュ合計が自動的に計算されます。むしろ単純な集約では、二重引用符を見つけてそれに応じて処理することができます。
+0

ありがとうございました。グリッドFSを使用している人は、従来の、比較的簡単で伝統的な、おそらく時代遅れのサーバーfsによるアプローチを使用していますか?もしそうなら、現時点で残高はどこですか? – d2048

1

バイナリデータが大量にあり、シャーディングを利用したい場合は、gridfsを使用してバイナリデータをmongo dbに保存することができます。しかし、パフォーマンスの観点から、明らかにファイルシステムにイメージを格納することを指摘した方が良い方法です。

関連する問題