2

重複の可能性:
オーディオやビデオなどの巨大なファイルのデータベース

大量のバイナリデータ(画像、ビデオ、ドキュメントなど)を保存するための最良の(または少なくとも十分な)方法を探しています。ソリューションはスケーラブルである必要があり、X量のデータの後でスタックすることはできません。

たとえば、すべてのデータが保持されるMySQLデータベースを1か所にしたいです。Webフロントエンドの1つが(要求に応じて)それを必要とする場合、DBから取得し、後で使用するために永続的にキャッシュできます。

これから、http: //dev.mysql.com/doc/refman/5.0/en/table-size-limit.htmlで見ることができるものMySQLテーブルはテーブルごとに4TBを超えて保存することはできません。おそらくnosqlデータベースのようなより適切なものはありますか、それともすべてを1つのサーバー上のファイルに保存し、それをすべてのWebフロントエンドに伝播する方が良いでしょうか?

4

2 に答える 2

4

通常、大きなファイルをリレーショナルデータベースに保存することは望ましくありません。これは、それらが設計されたものではありません。また、いくつかの例外はありますが、NoSQLソリューションは通常、このために設計されていないため、使用しないことをお勧めします(以下を参照)。

ファイルシステムにファイルを保存するという最後のアイデア(これがファイルシステム設計目的であることに注意してください;)は、おそらく正しいアプローチです。これは、スケーラビリティ要件によっては多少難しい場合がありますが、次のいずれかを使用することをお勧めします。

  • さん。SANは、ネットワーク内に冗長で可用性の高いストレージソリューションを提供します。SANが提供するストレージに複数のサーバーを接続し、相互にファイルを共有することができます。このソリューションは通常、エンタープライズ指向であり、確実に実装するにはかなりの費用がかかることに注意してください(少なくとも、物理ハードウェアとRAIDコントローラーおよび多数のディスクが必要です)。

  • CDN。コンテンツ配信ネットワークは、インターネットを介してエンドユーザーにファイルを提供するためのリモートのグローバル分散システムです。通常、ファイルをサーバー上の場所に配置し、実際に配布するためにCDNに複製します。CDNが機能する方法は、ユーザーが要求しているファイルがない場合、サーバーから自動的にフェッチしようとすることです。ファイルのコピーを1回取得すると、一定期間ファイルをキャッシュします。通常、帯域幅のコストや処理のオーバーヘッドによって膨大な数のファイルを同時に提供することによる制約がある場合は、非常に役立ちます。

  • クラウドオファリング(Amazon S3、Rackspace CloudFiles)。これらはCDNに似ていますが、既存のクラウドインフラストラクチャを使用している場合は、それでうまく機能します。クラウドAPIにリクエストを発行してファイルを保存すると、CDNの場合と同様に、その後インターネット経由で利用できるようになります。主な違いは、ストレージ要求(作成、削除、または更新)を手動で発行する必要があることです。

提供するファイルの数が少ない場合は、社内ソリューションを使用することもできます。2つまたは3つのサーバーにファイルを保存します(おそらく、サーバーのセットが大きく、スペースが問題になる場合は、ハッシュ計算を使用してシャーディングします)。フロントエンドサーバーがストレージサーバーからファイルを要求するための小さなAPIを構築し、代替サーバーが利用できない場合は代替サーバーにフォールバックします。

私がほとんど忘れていた解決策の1つは(研究目的以外に使用したことはありませんが)、RiakのLuwakプロジェクトです。LuwakはRiakの拡張機能であり、効率的な分散キー/値ストアであり、大きなファイルを一貫したサイズのセグメントに分割し、それらのセグメントをツリー構造に格納してすばやくアクセスできるようにすることで、大きなファイルのサポートを提供します。前の段落で説明した冗長性、シャーディング、およびAPIが無料で提供されるため、調査する必要があるかもしれません。

于 2013-01-27T11:34:00.137 に答える
2

私はかなり大きなウェブサイトで(ボランティアの)開発者として働いています。14000枚の画像に2GBの画像があり[これは明らかに「世界記録」にはほど遠いです]、150MBのデータベースのデータベースがあります。画像ファイルは、データベースオブジェクトとしてではなく、個別のファイルとして保存されます。これは、さまざまな用途に合わせて画像のサイズを変更するためです。サムネイル、中規模および大規模の画像は、保存された画像からプログラムで作成されます(これは、保存された画像に使用する「大」サイズよりも大きい場合があります。サイト)。

「ブロブ」(バイナリラージオブジェクト)をSQLデータベースに格納することは可能ですが、それが最善の解決策ではないと思います。データベースに参照を保存して、実際に保存されたファイルのパスとファイル名の組み合わせを作成できるようにする[そして、実際の画像を何らかのスクリプト(php、jsp、rubyなど)の背後に隠す]のがより良い解決策になります。

于 2013-01-27T12:54:31.097 に答える