53
  1. redisレプリケーションとredisシャーディングの違いを知っている人はいますか?
  2. 彼らは何のために使うのですか?Redisはデータをメモリに保存しますが、これはレプリケーション/シャーディングにどのように影響しますか?
  3. 両方を一緒に使用することは可能ですか?
4

3 に答える 3

139

シャーディングはほぼレプリケーションのアンチテーゼですが、それらは直交する概念であり、連携してうまく機能します。

分割とも呼ばれるシャーディングは、キーごとにデータを分割します。ミラーリングとも呼ばれるレプリケーションは、すべてのデータをコピーすることです。

シャーディングは、パフォーマンスを向上させ、任意の 1 つのリソースのヒットとメモリ負荷を削減するのに役立ちます。レプリケーションは、読み取りの可用性を高めるのに役立ちます。複数のレプリカから読み取る場合、すべてのリソースのヒット率も低下しますが、すべてのリソースのメモリ要件は変わりません。スレーブに書き込むことはできますが、レプリケーションはマスター -> スレーブのみであることに注意してください。したがって、この方法で書き込みをスケーリングすることはできません。

[1:Apple]、[2:Banana]、[3:Cherry]、[4:Durian] というタプルがあり、2 台のマシン A と B があるとします。シャーディングを使用すると、鍵 2,4 をマシンA; マシン B にキー 1、3 を格納します。レプリケーションでは、キー 1、2、3、4 をマシン A に格納し、キー 1、2、3、4 をマシン B に格納します。

シャーディングは通常、キーに対して一貫したハッシュを実行することによって実装されます。上記の例は、次のハッシュ関数 h(x){return x%2==0?A:B} で実装されました。

概念を組み合わせるために、各シャードを複製する場合があります。上記の場合、マシン A のすべてのデータ (2、4) をマシン C に複製し、マシン B のすべてのデータ (1、3) をマシン D に複製することができます。

特定のクロスキー関数は機能しなくなりますが、任意のキー値ストア (Redis はその一例にすぎません) がシャーディングをサポートします。Redis はすぐに使用できるレプリケーションをサポートしています。

于 2010-02-24T00:01:52.523 に答える
25

簡単に言えば、2 つの概念の基本的な違いは、シャーディングは書き込みのスケーリングに使用され、レプリケーションは読み取りのスケーリングに使用されるということです。Alex が既に述べたように、レプリケーションも HA を実現するためのソリューションの 1 つです。

はい、クラスター内のノード間でシャードを複製する方法を検討する場合、通常は両方とも一緒に使用されます。

3 番目の質問に関しては、RAM フラッシュ オプションの代わりに、Redis Append Only File (AOF) を使用することをお勧めします。(書き込み速度の点で) わずかなコストで、書き込みの信頼性が大幅に向上します。これは mysql のバイナリ ログによく似ています。1 fsync/秒の使用が推奨されるオプションです。

于 2010-11-09T05:43:53.167 に答える