TairZset (exZset) データ構造を使用すると、256のディメンションに基づいてDOUBLE型のデータをソートできます。 ゲーム、ライブストリーミング、音楽、eコマースなどの業界で使用するリーダーボードを実装するのに理想的です。 TairZsetはデータ処理効率を向上させ、データをエンコード、デコード、またはカプセル化する必要がないため、クライアント側での実装も簡単です。
概要
オープンソースRedisのSorted Set (Zsetとも呼ばれます) データ構造では、複数のディメンションではなく1つのディメンションでDOUBLEタイプのスコアをソートできます。 たとえば、IEEE Standard For Floating-Point Arithmetic (IEEE 754) 標準を使用して、スコアデータを連結して多次元ソートを実装できます。 しかし、この方法は、複雑なロジック、精度の低下、EXZINCRBYコマンドが利用できないなどの欠点があります。
多次元ソートの実装を支援するために、Alibaba CloudはTairZsetデータ構造を開発しました。 上記の方法と比較して、TairZsetには次の利点があります。
DOUBLEタイプのスコアを最大256のディメンションに基づいてソートできます。 スコアは、優先順位に基づいて左から右に表示されます。
多次元ソートでは、左スコアは右スコアよりも高い優先度を有する。 例として、score1#score2#score3形式の3次元スコアの比較を取り上げます。 TairZsetは、複数の3次元スコアのスコアを比較し、スコアが等しい場合にのみスコア2に進む。 スコアが等しくない場合、スコアのランキングは、関係する3次元スコアのランキングを表す。 同じ論理によって、score2が等しい場合にのみscore3が比較される。 すべてのスコアが等しく、同じことがスコア2およびスコア3に当てはまる場合、関与する多次元スコアはASCIIソート順にランク付けされる。
わかりやすくするために、数値記号 (#) を小数点 (.) として想像できます。 このように、0#99 < 99#90 < 99#99は、0.99 < 99.90 < 99.99として見ることができる。
EXZINCRBYコマンドをサポートします。 現在のデータを取得し、データに増分を適用してから、データをTairに書き戻す操作を実行する必要がなくなりました。
オープンソースのRedis Zsetと同様のAPIをサポートします。
実装できます 通常のリーダーボード および 分散型リーダーボード マルウェアを検出します。 マルウェアが検出されると、この機能はアラートイベントを生成します。
オープンソースのTairJedisクライアントをサポートします。 TairJedisクライアントの詳細については、GitHubをご覧ください。 データのエンコード、デコード、カプセル化を行うことなく、TairJedisクライアントを使用できます。 オープンソースコードを参照して、他のプログラミング言語のクライアントをカプセル化することもできます。
典型的なシナリオ
TairZsetは、ゲーム、ライブストリーミング、音楽、eコマースなどの業界で使用するリーダーボードを実装するのに理想的です。 次のセクションでは、いくつかの例を示します。
ライブストリーミング業界のリーダーボード: ライブマッチでは、コメンテーターは現在の人気度でソートされます。 人気値が同じである場合、それらは彼らのいいねの数によってソートされる。 いいねの数も同じであれば、彼らは彼らの贈り物の価値によってソートされます。
メダルのリーダーボード: 参加者は、金、銀、銅メダルの数で分類されます。 金メダルの数が同じ場合は、銀メダルの数でソートされます。 銀メダルの数も同じであれば、銅メダルの数でソートされます。
ゲーム業界のリーダーボード: プレイヤーは、スコア、タスクの完了速度、達成レベルなど、複数の要因に基づいてソートされます。
このモジュールはオープンソースです。 詳細については、『GitHub』をご参照ください。
ベストプラクティス
前提条件
インスタンスは、マイナーバージョンが1.7.1以降のTair DRAMベースのインスタンスです。
最新のマイナーバージョンは、より多くの機能とより高い安定性を提供します。 インスタンスを最新のマイナーバージョンに更新することを推奨します。 詳細については、「インスタンスのマイナーバージョンの更新」をご参照ください。 お使いのインスタンスがクラスターインスタンスまたは読み書き分離インスタンスの場合、すべてのコマンドを期待どおりに実行できるように、インスタンスのプロキシノードを最新のマイナーバージョンに更新することを推奨します。
注意事項
管理するTairZsetデータは、Tairインスタンスに保存されます。
TairZsetコマンド
コマンド | 構文 | 説明 |
| 指定された要素とそのスコアをTairZsetキーに格納します。 複数のスコアと要素を指定できます。 説明 多次元ソートを実装するには、各次元のスコアを数値記号 (#) で区切ることができます。 例: | |
| TairZsetキーの要素のスコアを増加させます。 incrementは、スコアに追加する値を示します。 | |
| TairZsetキーの要素のスコアを返します。 キーまたは要素が存在しない場合、nilの値が返されます。 | |
| 指定されたスコア範囲内のTairZsetキーの要素を返します。 | |
| 指定されたスコア範囲内のTairZsetキーの要素を返します。 要素はスコアの降順で格納され、同じスコアの要素は逆の辞書順でソートされます。 説明 このコマンドはEXZRANGEと似ていますが、結果を逆にソートします。 | |
| スコアがmin値以上、max値以下のTairZsetキーの要素を返します。 返された要素はスコアによって昇順にソートされ、同じスコアを持つ要素は辞書式の順序で返されます。 | |
| スコアがmin値以上、max値以下のTairZsetキーの要素を返します。 TairZset要素のデフォルトのソートとは異なり、このコマンドによって返される要素はスコアの降順でソートされ、同じスコアを持つ要素は逆の辞書式順序でソートされます。 説明 このコマンドはEXZRANGEBYSCOREと似ていますが、このコマンドは結果を逆にソートし、minの前にmaxを配置する点が異なります。 | |
| キーのすべての要素が同じスコアを持つ場合、スコアがmin値とmax値の間にあるTairZsetキーの要素を返します。 これにより、要素が辞書式順序で確実にソートされます。 | |
| キーのすべての要素が同じスコアを持つ場合、スコアが最小値と最大値の間にあるTairZsetキーの要素を返します。 これにより、要素が辞書式順序で確実にソートされます。 説明 このコマンドはEXZRANGEBYLEXと似ていますが、このコマンドは結果を逆にソートし、minの前にmaxを配置します。 | |
| TairZsetキーから指定された要素を削除します。 指定された要素が存在しない場合、その要素は無視されます。 | |
| スコアがmin値以上で、かつmax値以下の要素をTairZsetキーから削除します。 | |
| ランクがstart値とstop値の範囲内にある要素をTairZsetキーから削除します。 | |
| キーのすべての要素が同じスコアを持つ場合、スコアが最小値と最大値の間にあるTairZsetキーの要素を削除します。 これにより、要素が辞書式順序で確実にソートされます。 説明 minパラメーターとmaxパラメーターを使用して、EXZREMRANGEBYLEXコマンドとEXZRANGEBYLEXコマンドに同じ範囲を指定した場合、EXZREMRANGEBYLEXコマンドによって削除される要素は、EXZRANGEBYLEXコマンドによって返される要素と同じになります。 | |
| TairZsetキーのカーディナリティを返します。 カーディナリティは、キー内の要素の数を示します。 | |
| TairZsetキーの要素のランクを返します。 ランクはスコアで昇順にソートされます。 ランクはゼロベースの番号付けスキームを使用し、スコアが最も低い要素のランクは0です。 ランクはインデックスとも呼ばれます。 | |
| TairZsetキーの要素のランクを返します。 ランクはスコアの降順でソートされます。 ランクはゼロベースの番号付けスキームを使用し、最も高いスコアを持つ要素のランクは0です。 ランクはインデックスとも呼ばれます。 説明 このコマンドはEXZRANKと似ていますが、結果を逆にソートします。 | |
| スコアがmin値とmax値の間にあるTairZsetキーの要素数を返します。 | |
| キーのすべての要素が同じスコアを持つ場合、スコアが最小値と最大値の間にあるTairZsetキーの要素の数を返します。 これにより、要素が辞書式順序で確実にソートされます。 | |
| TairZsetキーで指定された要素スコアのランクを計算します。 ランクはスコアで昇順にソートされます。 ランクはゼロベースの番号付けスキームを使用し、スコアが最も低い要素のランクは0です。 ランクはインデックスとも呼ばれます。 説明 スコアが存在しない場合、キー内のスコアの推定ランクが返されます。 スコアが既に存在する場合、Tairは、キー内の既存のスコアの前にスコアをランク付けする。 | |
| TairZsetキーで指定された要素スコアのランクを計算します。 ランクはスコアの降順でソートされます。 ランクはゼロベースの番号付けスキームを使用し、最も高いスコアを持つ要素のランクは0です。 ランクはインデックスとも呼ばれます。 説明 スコアが存在しない場合、キー内のスコアの推定ランクが返されます。 スコアが既に存在する場合、Tairは、キー内の既存のスコアの後ろにスコアをランク付けする。 | |
| 1つ以上のTairZsetキーを削除します。 |
このトピックで使用されるコマンド構文の規則を次に示します。
Uppercase keyword
: commandキーワードを示します。イタリックテキスト
: 変数を示します。[options]
: 囲まれたパラメータがオプションであることを示します。 括弧で囲まれていないパラメータを指定する必要があります。A | B
: 縦棒 (|) で区切られたパラメータが相互に排他的であることを示します。 指定できるパラメーターは1つだけです。...
: このシンボルの前にあるパラメーターを繰り返し指定できることを示します。
EXZADD
項目 | 説明 |
構文 |
|
時間の複雑さ | O(N) |
コマンド説明 | 指定された要素とそのスコアをTairZsetキーに格納します。 複数のスコアと要素を指定できます。 システムは、キーと要素が存在するかどうかに基づいて異なる戦略を使用します。 説明 多次元ソートを実装するには、各次元のスコアを数値記号 (#) で区切ることができます。 例:
|
パラメーター |
|
Output | 出力は整数である。 次のルールは、出力について説明します。
|
例: | サンプルコマンド:
サンプル出力:
|
EXZINCRBY
項目 | 説明 |
構文 |
|
時間の複雑さ | O (ログ (N)) |
コマンド説明 | TairZsetキーの要素のスコアを増加させます。 incrementは、スコアに追加する値を示します。 システムは、キーと要素が存在するかどうかに基づいて異なる戦略を使用します。
説明
|
パラメーター | なし |
Output | 文字列としての要素の新しいスコア。 多次元スコアが使用される場合、スコアは |
例: | サンプルコマンド:
サンプル出力:
|
EXZSCORE
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | TairZsetキーの要素のスコアを返します。 キーまたは要素が存在しない場合、nilの値が返されます。 |
パラメーター | なし |
Output | 文字列としての要素のスコア。 多次元スコアが使用される場合、スコアは |
例: | サンプルコマンド:
サンプル出力:
|
贅沢
項目 | 説明 |
構文 |
|
時間の複雑さ | ここで、NはTairZsetキー内の要素の数を示し、Mは返される要素の数を示す。 |
コマンド説明 | 指定されたスコア範囲内のTairZsetキーの要素を返します。 |
パラメーター |
|
Output | 指定されたスコア範囲内の要素のリスト。 WITHSCORESパラメーターを指定すると、要素のスコアが返されます。 |
例: | サンプルコマンド:
サンプル出力:
|
EXZREVRANGE
項目 | 説明 |
構文 |
|
時間の複雑さ | ここで、NはTairZsetキー内の要素の数を示し、Mは返される要素の数を示す。 |
コマンド説明 | 指定されたスコア範囲内のTairZsetキーの要素を返します。 要素はスコアの降順で格納され、同じスコアの要素は逆の辞書順でソートされます。 説明 このコマンドはEXZRANGEと似ていますが、結果を逆にソートします。 |
パラメーター |
|
Output | 指定されたスコア範囲内の要素のリスト。 WITHSCORESパラメーターを指定すると、要素のスコアが返されます。 |
例: | サンプルコマンド:
サンプル出力:
|
EXZRANGEBYSCORE
項目 | 説明 |
構文 |
|
時間の複雑さ | ここで、NはTairZsetキー内の要素の数を示し、Mは返される要素の数を示す。 説明 Mを定数とすると、この式はO(log(N)) とみなすことができる。 たとえば、最初の10個の要素が常にLIMIT句を使用して返されるように指定できます。 |
コマンド説明 | スコアがmin値以上、max値以下のTairZsetキーの要素を返します。 返される要素はスコアで昇順にソートされます。 同じスコアを持つ要素は、辞書式の順序で返されます。 |
パラメーター |
|
Output | 指定されたスコア範囲内の要素のリスト。 WITHSCORESパラメーターを指定すると、要素のスコアが返されます。 |
例: | サンプルコマンド:
サンプル出力:
|
EXZREVRANGEBYSCORE
項目 | 説明 |
構文 |
|
時間の複雑さ | ここで、NはTairZsetキー内の要素の数を示し、Mは返される要素の数を示す。 説明 Mを定数とすると、この式はO(log(N)) とみなすことができる。 たとえば、最初の10個の要素が常にLIMIT句を使用して返されるように指定できます。 |
コマンド説明 | スコアがmin値以上、max値以下のTairZsetキーの要素を返します。 TairZset要素のデフォルトのソートとは異なり、このコマンドによって返される要素はスコアの降順でソートされ、同じスコアを持つ要素は逆の辞書式順序でソートされます。 説明 このコマンドはEXZRANGEBYSCOREと似ていますが、このコマンドは結果を逆にソートし、minの前にmaxを配置する点が異なります。 |
パラメーター |
|
Output | 指定されたスコア範囲内の要素のリスト。 WITHSCORESパラメーターを指定すると、要素のスコアが返されます。 |
例: | サンプルコマンド:
サンプル出力:
|
EXZRANGEBYLEX
項目 | 説明 |
構文 |
|
時間の複雑さ | ここで、NはTairZsetキー内の要素の数を示し、Mは返される要素の数を示す。 説明 Mを定数とすると、この式はO(log(N)) とみなすことができる。 たとえば、最初の10個の要素が常にLIMIT句を使用して返されるように指定できます。 |
コマンド説明 | キーのすべての要素が同じスコアを持つ場合、スコアがmin値とmax値の間にあるTairZsetキーの要素を返します。 これにより、要素が辞書式順序で確実にソートされます。 説明
|
パラメーター |
|
Output | スコア値が指定された範囲内にある要素のリスト。 |
例: | サンプルコマンド:
] サンプル出力:
|
EXZREVRANGEBYLEX
項目 | 説明 |
構文 |
|
時間の複雑さ | ここで、NはTairZsetキー内の要素の数を示し、Mは返される要素の数を示す。 説明 Mを定数とすると、この式はO(log(N)) とみなすことができる。 たとえば、最初の10個の要素が常にLIMIT句を使用して返されるように指定できます。 |
コマンド説明 | キーのすべての要素が同じスコアを持つ場合、スコアが最小値と最大値の間にあるTairZsetキーの要素を返します。 これにより、要素が辞書式順序で確実にソートされます。 説明 このコマンドはEXZRANGEBYLEXと似ていますが、このコマンドは結果を逆にソートし、minの前にmaxを配置します。 |
パラメーター |
|
Output | スコア値が指定された範囲内にある要素のリスト。 |
例: | サンプルコマンド:
サンプル出力:
|
EXZREM
項目 | 説明 |
構文 |
|
時間の複雑さ | O(M * log(N)) であり、ここで、Nは、TairZsetキーにおける要素の数を示し、Mは、除去されるべき要素の数を示す。 |
コマンド説明 | TairZsetキーから指定された要素を削除します。 指定された要素が存在しない場合、その要素は無視されます。 説明 キーが存在するが、そのデータ構造がTairZsetでない場合、エラーが返されます。 |
パラメーター | なし |
Output | キーから削除された要素の数。 存在しない要素は含まれません。 |
例: | サンプルコマンド:
サンプル出力:
|
EXZREMRANGEBYSCORE
項目 | 説明 |
構文 |
|
時間の複雑さ | O(log(N)+ M) であり、ここで、Nは、TairZsetキーにおける要素の数を示し、Mは、除去されるべき要素の数を示す。 |
コマンド説明 | スコアがmin値以上で、かつmax値以下の要素をTairZsetキーから削除します。 |
パラメーター | min: 最低スコアを示します。 max: 最高のスコアを示します。 多次元スコアが使用される場合、各次元のスコアは数字記号 (#) で区切られます。 説明
|
Output | 削除された要素の数。 |
例: | サンプルコマンド:
サンプル出力:
|
EXZREMRANGEBYRANK
項目 | 説明 |
構文 |
|
時間の複雑さ | O(log(N)+ M) であり、ここで、Nは、TairZsetキーにおける要素の数を示し、Mは、除去されるべき要素の数を示す。 |
コマンド説明 | ランクがstart値とstop値の範囲内にある要素をTairZsetキーから削除します。 |
パラメーター | startとstopはどちらもゼロベースのインデックスを示します。 0は、スコアが最も低い要素を示します。 これらのインデックスは負の数にすることができます。 これらの数は、最も高いスコアを有する要素で始まるオフセットを示す。 たとえば、-1はスコアが最も高い要素を示し、-2はスコアが2番目に高い要素を示します。 他の要素も同じルールに従います。 |
Output | 削除された要素の数。 |
例: | サンプルコマンド:
サンプル出力:
|
EXZREMRANGEBYLEX
項目 | 説明 |
構文 |
|
時間の複雑さ | O(log(N)+ M) であり、ここで、Nは、TairZsetキーにおける要素の数を示し、Mは、除去されるべき要素の数を示す。 |
コマンド説明 | キーのすべての要素が同じスコアを持つ場合、スコアが最小値と最大値の間にあるTairZsetキーの要素を削除します。 これにより、要素が辞書式順序で確実にソートされます。 説明 minパラメーターとmaxパラメーターを使用して、EXZREMRANGEBYLEXコマンドとEXZRANGEBYLEXコマンドに同じ範囲を指定した場合、EXZREMRANGEBYLEXコマンドによって削除される要素は、EXZRANGEBYLEXコマンドによって返される要素と同じになります。 |
パラメーター | min: 要素名の最小文字列表現値を示します。 max: 要素名の最大文字列表現値を示します。 文字の間隔を指定する必要があります。 次のセクションでは、間隔を指定する方法を示します。
|
Output | 削除された要素の数。 |
例: | サンプルコマンド:
] サンプル出力:
|
EXZCARD
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | TairZsetキーのカーディナリティを返します。 カーディナリティは、キー内の要素の数を示します。 |
パラメーター | なし |
Output | キーに含まれる要素の数。 キーが存在しない場合、値0が返されます。 |
例: | サンプルコマンド:
サンプル出力:
|
EXZRANK
項目 | 説明 |
構文 |
|
時間の複雑さ | O (ログ (N)) |
コマンド説明 | TairZsetキーの要素のランクを返します。 ランクはスコアで昇順にソートされます。 ランクはゼロベースの番号付けスキームを使用し、スコアが最も低い要素のランクは0です。 ランクはインデックスとも呼ばれます。 |
パラメーター | なし |
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
EXZREVRANK
項目 | 説明 |
構文 |
|
時間の複雑さ | O (ログ (N)) |
コマンド説明 | TairZsetキーの要素のランクを返します。 ランクはスコアの降順でソートされます。 ランクはゼロベースの番号付けスキームを使用し、最も高いスコアを持つ要素のランクは0です。 ランクはインデックスとも呼ばれます。 説明 このコマンドはEXZRANKと似ていますが、結果を逆にソートします。 |
パラメーター | なし |
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
EXZCOUNT
項目 | 説明 |
構文 |
|
時間の複雑さ | O(log(N)) であり、NはTairZsetキーの要素数を示す。 説明 このコマンドは、要素ランクを使用してクエリ範囲を取得します。 したがって、このコマンドに関連付けられたワークロードは、範囲のサイズに比例しません。 |
コマンド説明 | スコアがmin値とmax値の間にあるTairZsetキーの要素数を返します。 |
パラメーター | min: 最低スコアを示します。 max: 最高のスコアを示します。 多次元スコアが使用される場合、各次元のスコアは数字記号 (#) で区切られます。 説明
|
Output | 指定されたスコア範囲内の要素の整数。 |
例: | サンプルコマンド:
サンプル出力:
|
EXZLEXCOUNT
項目 | 説明 |
構文 |
|
時間の複雑さ | O(log(N)) であり、NはTairZsetキーの要素数を示す。 説明 このコマンドは、要素ランクを使用してクエリ範囲を取得します。 したがって、このコマンドに関連付けられたワークロードは、範囲のサイズに比例しません。 |
コマンド説明 | キーのすべての要素が同じスコアを持つ場合、スコアが最小値と最大値の間にあるTairZsetキーの要素の数を返します。 これにより、要素が辞書式順序で確実にソートされます。 説明
|
パラメーター | min: 要素名の最小文字列表現値を示します。 max: 要素名の最大文字列表現値を示します。 文字の間隔を指定する必要があります。 次のセクションでは、間隔を指定する方法を示します。
|
Output | 指定されたスコア範囲内の要素の整数。 |
例: | サンプルコマンド:
] サンプル出力:
|
EXZRANKBYSCORE
項目 | 説明 |
構文 |
|
時間の複雑さ | O (ログ (N)) |
コマンド説明 | TairZsetキーで指定された要素スコアのランクを計算します。 ランクはスコアで昇順にソートされます。 ランクはゼロベースの番号付けスキームを使用し、スコアが最も低い要素のランクは0です。 ランクはインデックスとも呼ばれます。 説明 スコアが存在しない場合、キー内のスコアの推定ランクが返されます。 スコアが既に存在する場合、Tairは、キー内の既存のスコアの前にスコアをランク付けする。 |
パラメーター | なし |
Output | キー内のスコアのランク。 |
例: | サンプルコマンド:
サンプル出力:
|
EXZREVRANKBYSCORE
項目 | 説明 |
構文 |
|
時間の複雑さ | O (ログ (N)) |
コマンド説明 | TairZsetキーで指定された要素スコアのランクを計算します。 ランクはスコアの降順でソートされます。 ランクはゼロベースの番号付けスキームを使用し、最も高いスコアを持つ要素のランクは0です。 ランクはインデックスとも呼ばれます。 説明 スコアが存在しない場合、キー内のスコアの推定ランクが返されます。 スコアが既に存在する場合、Tairは、キー内の既存のスコアの後ろにスコアをランク付けする。 |
パラメーター | なし |
Output | キー内のスコアのランク。 |
例: | サンプルコマンド:
サンプル出力:
|