English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
パーティションはデータを複数のRedisインスタンスに分割するプロセスであり、したがって各インスタンスはキーの一部のサブセットのみを保存します。
複数のコンピュータのメモリの合計を使用して、より大きなデータベースを構築できます。
マルチコアと複数のコンピュータを使用して、計算能力を拡張できます;複数のコンピュータとネットワークアダプタを使用して、ネットワーク帯域幅を拡張できます。
Redisの一部の特性はパーティションの面で非常に良い結果を得られていません:
複数のキーに関連する操作は通常サポートされていません。例えば、2つのセットが異なるRedisインスタンスにマッピングされている場合、これらのセットに対して交集合操作を行うことはできません。
複数のキーに関連するRedisトランザクションは使用できません。
パーティションを使用する場合、データ処理が複雑になります。例えば、複数のRDBを処理する必要があります。/AOFファイルであり、複数のサンプルやホストのバックアップファイルから持久化されます。
容量の追加や削除も複雑です。Redisクラスターの多くは、実行中にノードの追加や削除を行う透明なデータバランスの能力をサポートしていますが、クライアントのパーティションやプロキシなどの他のシステムではこの機能がサポートされていません。しかし、preshardingと呼ばれる技術がこれに対して役立ちます。
Redisには2つのパーティションタイプがあります。 仮に4のRedisサンプル R0、R1、R2、R3、およびuser:1、user:2このようにユーザーの複数のkeyを表現し、特定のkeyに対してそのkeyをどのサンプルに保存するかを選択する方法が複数あります。つまり、異なるシステムが特定のkeyを特定のRedisサービスにマッピングするシステムがあります。
最もシンプルなパーティション方法は範囲パーティションで、特定のRedisサンプルに特定範囲のオブジェクトをマッピングする方法です。
たとえば、IDから010000のユーザーは例のR0、IDから保存されます。10001まで 20000のユーザーはR1、そのようにして。
この方法は実用的で実際に使用されていますが、不足は範囲を例のマッピングテーブルに指定する必要があることです。このテーブルは管理され、さらに様々なオブジェクトのマッピングテーブルが必要です。これは、Redisにとってよくない方法です。
別のパーティション方法はハッシュパーティションです。これはどんなkeyにも適用でき、object_name:という形式でなくても簡単に適用できます:
ハッシュ関数を使用してkeyを数字に変換し、例えばcrc32 ハッシュ関数。key foobarに対してcrc32(foobar)は似たような出力を出力します。93024922の整数に変換します。
この整数に対してモジュロを取って、0-3の間の数字を使用して、この整数を4のRedisサンプルの1つに保存されるべきです。93024922 % 4 = 2、つまりkey foobarはR2例において。注意:モジュロ操作は割り算の余りを取得し、多くのプログラミング言語では%演算子で実現されます。