2013-08-22 8 views
16

質問1:私はRedisがすべてのデータをメモリにロードすることを知っているため、読み書き速度が向上しています。つまり、私のメモリサイズが2Gの場合、最大データセットサイズは2Gを超えてはいけませんか?今私のデータベースは100G +のデータを持っています、私のサーバーのメモリは32Gより大きくすることはできませんので、Redisはもはや私には適していませんか?Redis、distributedまたはnot?

質問2: Redisは分散システムですか? Googleを使ってredisのCAPプロパティを検索すると、Redisは分散システムではないと言われています。したがって、CAP とは関係ありません。しかしWikipediaから、それはマスタースレーブアーキテクチャ、多くの奴隷を持つ1つのマスターを持っていると言います。 どのように混乱しますか。

答えて

35

質問1に関して、Redisは、いくつかの永続性機能を備えたインメモリストアです。すべてのデータセットはメモリに収まる必要があります。したがって、単一インスタンスはサーバーの最大メモリーによって制限されます。現在、複数のサーバーで実行されている複数のRedisインスタンスにデータを分割することもできます。予算があれば、100GB〜1TBのデータを1組のRedisボックスに保存することは完全に可能です。シャーディングは自動ではなく、クライアントまたはアプリケーションによって実装される必要があります。また、データに対して実行できる操作にいくつかの制約があります(たとえば、サーバー側で異なるRedisインスタンスによってホストされる2つのセットの交点を計算することはできません)。

質問2について、単一のRedisインスタンスは分散システムではありません。それは遠隔集中保管店です。 Redisのインスタンスをいくつか使用することで、分散システムを構築できます。それはあなた自身のアプローチなので、CPまたはAPシステムにすることができます。

単一のインスタンスは、そのアクティビティをスレーブインスタンスに複製できます(したがって、最終的にはマスタと一貫性があります)。アプリケーションは、読み取りと書き込みのために常にマスターに接続することを選択できます。その場合、あなたはCPシステムを手に入れることができます。また、マスターに書き込むことができ、すべてのインスタンス(スレーブを含む)から読み取ることができるので、APシステムを取得することができます。 Redisの上にこのようなシステムを構築するためにはかなりの労力が必要なので、私は「may」と言いました。

シャーディングとマスター/スレーブの複製を組み合わせて、必要な分散システムを構築することができます。しかし、Redisはこれを行うための基本的なレンガだけを提供しています。特に、弾力性とHA(そしてCAP定理のPに対処する)にはほとんど対応していません。 IMO、Redis sentinelだけでは、役割管理のみが対象となるため、HA Redis構成をサポートするには十分ではありません。リソースマネージャーでそれを補完し、多くのロジックをクライアント/アプリケーションに組み込む必要があります。

Redis Clusterと呼ばれる進行中のプロジェクトがあります。その目的は、使いやすい最小限の分散システムを提供することですが、それでも多くのものが欠けており、生産目的ではまだ使用できません。

市販の分散ストアが必要な場合、Redisはおそらく適切なオプションではありません。 Cassandra、Riak、MongoDB、Couchbase、Aerospike、MySQL Cluster、Oracle NoSQLなどの方が優れています。しかし、独自のシステムを構築したい場合、Redisは優れたコンポーネントです。

+0

貴重な情報は私にとっては重要です。あなたの説明から、私たちは特殊なシステムの構築に関心を持っているので、実際には適切ではありません.100G +私は今mongoDBとcouchDBにもっと注意を払うようになっています。 – wuchang

+1

また、私はRedisが**キャッシング**のための良い解決策であり、データ全体を保存していないと思います。したがって、頻繁な使用とアクセスのためにデータの断片化を保存することは可能です。 – Babak

関連する問題