10

一連のマシン間で、メガバイト単位または数ギガバイト単位の非常に大きなオブジェクトを共有したいと考えています。オブジェクトは 1 回書き込まれますが、何度も読み取ることができます。おそらく単純なアプローチは、 redis のようなセネタライズされたストレージを使用することです。ただし、単一障害点になる可能性があり、要求が多すぎると redis に対する DOS 攻撃が行われる可能性があります。その場合、分散ソリューションははるかに有望です。ただし、主な関心事は、構造をすべてのマシンに複製することです。レプリケーションがマスター/スレーブ手法を介して行われる場合、オブジェクトが大きいため、レプリケーションによってマスターに膨大なトラフィック負荷がかかる可能性があります。したがって、より良い解決策は、マスターのネットワーク負荷を軽減するために、オブジェクトを複製するための P2P 戦略を使用することです。

この問題の解決策を知っている人はいますか? おそらくいくつかの候補があります:
- Redis
- Memcached
- Voldemort
- Hazelcast

私の主な関心事は、Java インターフェイス、ビッグ オブジェクトの共有、高可用性、およびレプリケーション用のネットワーク トラフィックの低さです。

事前に感謝します。

4

1 に答える 1

15

NoSQL ストアに大きなオブジェクトをキャッシュすることは、メモリとネットワーク帯域幅の点でコストがかかるため、一般的にはお勧めできません。大きなオブジェクトの保存に関しては、NoSQL ソリューションが優れているとは思いません。Redis、memcached、およびその他のほとんどのキー/バリュー ストアは、明らかにこの目的のために設計されていません。

大きなオブジェクトを NoSQL 製品に保存する場合は、それらを細かく分割し、その断片を独立したオブジェクトとして保存する必要があります。これは、gridfs (標準の MongoDB ディストリビューションの一部) に対して 10gen で保持されているアプローチです。

http://docs.mongodb.org/manual/applications/gridfs/を参照してください。

大きなオブジェクトを保存するには、次のような分散ファイルシステムを検討します。

これらのシステムはスケーラブルで可用性が高く、ファイル インターフェイスとオブジェクト インターフェイスの両方を提供します (おそらくオブジェクト インターフェイスが必要です)。次の SO の質問を参照して、分散ファイルシステムを選択することもできます。

コモディティ Linux ストレージ ファームに最適な分散ファイル システム

これらのスケーラブルなストレージ ソリューションの上にキャッシュを実装するのはあなた次第です。

于 2013-01-28T18:14:48.730 に答える