TairRoaring は、Roaring ビットマップ用の Tair ベースのデータ構造です。このトピックでは、TairRoaring とそのサポートされているコマンドについて説明します。
TairRoaring の概要
ビットマップ (ビットセットとも呼ばれます) は、少量のストレージを使用して大量のデータのクエリを最適化する一般的なデータ構造です。ビットマップはハッシュベースの実装よりもスペースを節約しますが、疎なデータの保存には適していません。この問題に対応して、圧縮ビットマップが開発されました。Roaring ビットマップは、他の圧縮ビットマップよりも効率的でバランスの取れた、業界で認められているビットマップタイプです。
TairRoaring は、次の方法で Roaring ビットマップを最適化します:
TairRoaring は、2 レベルのインデックスと動的コンテナーを使用することで、多くのシナリオでパフォーマンスと空間計算量のバランスを取ることができます。
TairRoaring は、単一命令複数データ (SIMD)、ベクトル化、popcount アルゴリズムなどの最適化技術を使用して、計算効率を向上させ、効率的な時間と空間計算量を提供します。
TairRoaring は、Tair が提供する強力な計算パフォーマンスと高い安定性を活用して、ビジネスシナリオをサポートします。
典型的なシナリオ
TairRoaring は、ライブストリーミング、音楽、e コマースなどの業界での使用に適しています。TairRoaring を使用して、パーソナライズされた推奨や精密マーケティングなどのシナリオのために、ユーザーに多次元タグを追加できます。
リリースノート
TairRoaring V2 の変更点:
TR.RANGEINTARRAY: TairRoaring V1 の TR.RANGEINTARRAY は、TairRoaring V2 では TR.RANGE に変更されました。
TR.SETRANGE: V1 でのコマンドの出力は
OKであり、V2 での出力は 1 に設定されたビット数です。コマンドの他の側面は変更されていません。
2021 年 9 月 13 日に、マイナーバージョン 1.7.20 以降を実行するインスタンス向けに TairRoaring V1 がリリースされました。
2022 年 3 月 11 日に、マイナーバージョン 1.7.27 以降を実行するインスタンス向けに TairRoaring V2 がリリースされました。
TairRoaring V2 は、一部のコマンド実装を最適化し、コマンドのパフォーマンスを向上させます。TairRoaring V2 には、TR.SETBITS と TR.CLEARBITS を含む 9 つの新しいコマンドが含まれ、3 つのコマンドが更新され、そのうち 2 つは TairRoaring V1 と互換性があり、1 つのコマンドの名前が変更されます。
2022 年 4 月 20 日に、マイナーバージョン 1.8.1 以降を実行するインスタンス向けに TairRoaring V2.2 がリリースされました。
このバージョンでは、TR.JACCARD、TR.CONTAINS、および TR.RANK コマンドが追加され、キーが存在しない場合に一部のコマンドで返されるエラーが更新されます (
ERR key not foundエラーは削除されます)。
ベストプラクティス
TairRoaring を使用したオーディエンスセグメンテーション
要件
インスタンスは Tair メモリ最適化インスタンスです。メモリ最適化インスタンスが Redis 5.0 と互換性がある場合、マイナーバージョンは 1.7.7 以降である必要があります。
最新のマイナーバージョンは、より多くの機能と高い安定性を提供します。インスタンスを最新のマイナーバージョンに更新することをお勧めします。詳細については、「インスタンスのマイナーバージョンを更新する」をご参照ください。インスタンスがクラスターインスタンスまたは読み書き分離インスタンスである場合は、すべてのコマンドが期待どおりに実行されるように、インスタンスのプロキシノードを最新のマイナーバージョンに更新することをお勧めします。
使用上の注意
この操作は、Tair インスタンスの TairRoaring データに適用されます。
コマンドリスト
タイプ | コマンド | 構文 | 説明 | バージョン変更 |
書き込み操作 |
| TairRoaring キーの指定されたビットを 1 または 0 の値に設定し、元のビット値を返します。オフセットは 0 から始まります。 | - (N/A) | |
| TairRoaring キーの指定されたビットの値を 1 に設定します。複数のビット値を指定できます。 | V2 で追加 | ||
| TairRoaring キーの指定されたビットの値を 0 に設定します。指定されたビットの値がすでに 0 の場合、操作は実行されません。複数のビット値を指定できます。 | V2 で追加 | ||
| TairRoaring キーの指定された範囲内のビットを 1 の値に設定します。範囲は閉区間です。 | V2 で更新。V2 でのコマンド更新後、コマンドの出力は 1 に設定されたビット数に変更されます。 | ||
| Roaring Bitmap の指定されたビットの後の位置にビット配列を挿入し、元のデータを上書きします。ビット配列は 0 と 1 で構成されます。 | V2 で追加 | ||
| TairRoaring キーの指定された範囲内のビットの値を 0 から 1 に、または 1 から 0 に切り替えます。範囲は閉区間です。キーが存在しない場合、キーは空のデータセットとして作成され、そのキーに対して操作が実行されます。 | V2 で追加 | ||
| TairRoaring キーの指定されたビットの値を 1 に設定します。複数のビット値を指定できます。 説明 TairRoaring V2 では、このコマンドの代わりに TR.SETBITS を使用することをお勧めします。 | - | ||
| 指定された整数配列に基づいて TairRoaring キーを作成します。キーがすでに存在する場合、このコマンドはキーのデータを上書きします。 説明 TairRoaring V2 では、このコマンドの代わりに TR.SETBITS を使用することをお勧めします。 | - | ||
| 指定されたビット配列文字列に基づいて TairRoaring キーを作成します。ビット配列文字列は 0 と 1 で構成されます。キーがすでに存在する場合、このコマンドはキーのデータを上書きします。 説明 TairRoaring V2 では、このコマンドの代わりに TR.APPENDBITARRAY を使用することをお勧めします。 | - | ||
| Roaring Bitmap に対してセット操作を実行し、結果を destkey に保存します。このコマンドは、AND、OR、XOR、NOT、および DIFF 操作をサポートします。 説明 このコマンドは、クラスターインスタンスのスロットをまたいで存在するキーには使用できません。 | - | ||
| 複数の TairRoaring キーに対してビットごとの演算を実行します。AND、OR、XOR、NOT、および DIFF のビットごとの演算がサポートされています。 説明 このコマンドは、クラスターインスタンスのスロットをまたいで存在するキーには使用できません。 | V2 で追加 | ||
| TairRoaring キーのストレージを最適化します。キーが比較的に大きく、キーの作成後に主に読み取り操作に使用される場合は、このコマンドを実行できます。 | - | ||
読み取り操作 |
| TairRoaring キーから指定されたビットの値を取得します。 | - | |
| TairRoaring キーから指定されたビットの値を取得します。値の取得には複数のビットを指定できます。 | V2 で追加 | ||
| TairRoaring キーの指定された範囲内で値が 1 のビット数をカウントします。範囲は閉区間です。 | V2 で更新され、上位互換性があります。 | ||
| 序数が count のビットのオフセットを取得します。ビットの値は 1 または 0 です。count パラメーターはオプションで、デフォルト値は 1 です。値 1 は、左から右へのカウント方法を使用して取得された最初のビットを示します。 | V2 で更新され、上位互換性があります。 | ||
| TairRoaring キー内の指定されたビットの後に位置するすべてのビットをスキャンし、値が 1 のスキャンされたビットの数に対応するオフセットを返します。返されるカーソルは、キーに対応するオフセットです。 説明 このコマンドは、追加または削除された要素をスキャンして返す場合と返さない場合があります。 | V2 で追加 | ||
| TairRoaring キーの指定された範囲内で値が 1 のビットのオフセットを返します。範囲は閉区間です。 | V1 の TR.RANGEINTARRAY から V2 で TR.RANGE に名前が変更されました。 | ||
| TairRoaring キーの指定された範囲内で 0 と 1 のビット値で構成される文字列を取得します。範囲は閉区間です。 | V2 で追加 | ||
| TairRoaring キーで値が 1 の最初のビットのオフセットを取得します。値が 1 のビットがない場合、-1 の値が返されます。 | - | ||
| Roaring Bitmap で値が 1 の最後のビットのオフセットを取得します。値が 1 のビットがない場合、-1 が返されます。 | - | ||
| 指定された TairRoaring キーの統計情報を返します。情報には、コンテナーの数とメモリ使用量が含まれます。 | V2 で追加 | ||
| 2 つの TairRoaring キーのジャカード類似係数を取得します。係数が高いほど、類似性が高くなります。 説明 このコマンドは、クラスターインスタンスのスロットをまたいで存在するキーには使用できません。 | V2.2 で追加 | ||
| key2 に key1 が含まれているかどうかを確認します。はいの場合、key1 は key2 のサブセットであり、値 1 が返されます。それ以外の場合、key1 は key2 のサブセットではなく、値 0 が返されます。 説明 このコマンドは、クラスターインスタンスのスロットをまたいで存在するキーには使用できません。 | V2.2 で追加 | ||
| 最初のビットから指定されたビットまでの範囲内で値が 1 のビット数を取得します。範囲は閉区間です。 | V2.2 で追加 | ||
汎用操作 |
| 1 つ以上の TairRoaring キーを削除します。 | - |
次のセクションでは、コマンドの構文について説明します:
大文字のキーワード: コマンドのキーワードを示します。イタリック体のテキスト: 変数を示します。[options]: 囲まれたパラメーターがオプションであることを示します。角括弧で囲まれていないパラメーターは指定する必要があります。A|B: 縦棒 (|) で区切られたパラメーターが相互に排他的であることを示します。パラメーターのいずれか 1 つのみを指定できます。...: この記号の前のパラメーターを繰り返し指定できることを示します。
このトピックでは、時間計算量の式で使用される文字は、トピック固有の意味を示します:
C は、パラメーターの argc または範囲を示します。
M は、リスト内のノード数やハッシュ内のフィールド数など、データ構造内で 1 に設定されたビット数を示します。
TR.SETBIT
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | TairRoaring キーの指定されたビットを 1 または 0 の値に設定し、元のビット値を返します。オフセットは 0 から始まります。 |
パラメーター |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.SETBITS
項目 | 説明 |
構文 |
|
時間計算量 | O(C) |
コマンドの説明 | TairRoaring キーの指定されたビットの値を 1 に設定します。複数のビット値を指定できます。 |
オプション |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.CLEARBITS
項目 | 説明 |
構文 |
|
時間計算量 | O(C) |
コマンドの説明 | TairRoaring キーの指定されたビットの値を 0 に設定します。指定されたビットの値がすでに 0 の場合、操作は実行されません。複数のビット値を指定できます。 |
パラメーター |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.SETRANGE
項目 | 説明 |
構文 |
|
時間計算量 | O(C) |
コマンドの説明 | TairRoaring キーの指定された範囲内のビットを 1 の値に設定します。範囲は閉区間です。 たとえば、 |
オプション |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.APPENDBITARRAY
項目 | 説明 |
構文 |
|
時間計算量 | O(C) |
コマンドの説明 | Roaring Bitmap の指定されたビットの後の位置にビット配列を挿入し、元のデータを上書きします。ビット配列は 0 と 1 で構成されます。 |
パラメーター |
|
出力 |
|
例 | 事前に コマンド例: 出力例: この場合、TairRoaring foo キーは "101101" です。 |
TR.FLIPRANGE
項目 | 説明 |
構文 |
|
時間計算量 | O(C) |
コマンドの説明 | TairRoaring キーの指定された範囲内のビットの値を 0 から 1 に、または 1 から 0 に切り替えます。範囲は閉区間です。キーが存在しない場合、キーは空のデータセットとして作成され、そのキーに対して操作が実行されます。 |
パラメーター |
|
出力 |
|
例 | 事前に コマンド例: 出力例: この場合、TairRoaring foo キーは "01001" です。 |
TR.APPENDINTARRAY
項目 | 説明 |
構文 |
|
時間計算量 | O(C) |
コマンドの説明 | TairRoaring キーの指定されたビットの値を 1 に設定します。複数のビット値を指定できます。 説明 TairRoaring V2 では、このコマンドの代わりに TR.SETBITS を使用することをお勧めします。 |
パラメーター |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.SETINTARRAY
項目 | 説明 |
構文 |
|
時間計算量 | O(C) |
コマンドの説明 | 指定された整数配列に基づいて TairRoaring キーを作成します。キーがすでに存在する場合、このコマンドはキーのデータを上書きします。 説明 TairRoaring V2 では、このコマンドの代わりに TR.SETBITS を使用することをお勧めします。 |
パラメーター |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.SETBITARRAY
項目 | 説明 |
構文 |
|
時間計算量 | O(C) |
コマンドの説明 | 指定されたビット配列文字列に基づいて TairRoaring キーを作成します。ビット配列文字列は 0 と 1 で構成されます。キーがすでに存在する場合、このコマンドはキーのデータを上書きします。 説明 TairRoaring V2 では、このコマンドの代わりに TR.APPENDBITARRAY を使用することをお勧めします。 |
パラメーター |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.BITOP
項目 | 説明 |
構文 |
|
時間計算量 | O(C * M) |
コマンドの説明 | Roaring Bitmap に対してセット操作を実行し、結果を destkey に保存します。このコマンドは、AND、OR、XOR、NOT、および DIFF 操作をサポートします。 説明 このコマンドは、クラスターインスタンスのスロットをまたいで存在するキーには使用できません。 |
オプション |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.BITOPCARD
項目 | 説明 |
構文 |
|
時間計算量 | O(C * M) |
コマンドの説明 | 複数の TairRoaring キーに対してビットごとの演算を実行します。AND、OR、XOR、NOT、および DIFF のビットごとの演算がサポートされています。 説明 このコマンドは、クラスターインスタンスのスロットをまたいで存在するキーには使用できません。 |
options |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.OPTIMIZE
項目 | 説明 |
構文 |
|
時間計算量 | O(M) |
コマンドの説明 | TairRoaring キーのストレージを最適化します。キーが比較的に大きく、キーの作成後に主に読み取り操作に使用される場合は、このコマンドを実行できます。 |
オプション |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.GETBIT
項目 | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | TairRoaring キーから指定されたビットの値を取得します。 |
オプション |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.GETBITS
項目 | 説明 |
構文 |
|
時間計算量 | O(C) |
コマンドの説明 | TairRoaring キーから指定されたビットの値を取得します。値の取得には複数のビットを指定できます。 |
パラメーター |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.BITCOUNT
項目 | 説明 |
構文 |
|
時間計算量 | O(M) |
コマンドの説明 | TairRoaring キーの指定された範囲内で値が 1 のビット数をカウントします。範囲は閉区間です。 |
パラメーター |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.BITPOS
項目 | 説明 |
構文 |
|
時間計算量 | O(C) |
コマンドの説明 | 序数が count のビットのオフセットを取得します。ビットの値は 1 または 0 です。count パラメーターはオプションで、デフォルト値は 1 です。値 1 は、左から右へのカウント方法を使用して取得された最初のビットを示します。 |
パラメーター |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.SCAN
項目 | 説明 |
構文 |
|
時間計算量 | O(C) |
コマンドの説明 | TairRoaring キー内の指定されたビットの後に位置するすべてのビットをスキャンし、値が 1 のスキャンされたビットの数に対応するオフセットを返します。返されるカーソルは、キーに対応するオフセットです。 説明 このコマンドは、追加または削除された要素をスキャンして返す場合と返さない場合があります。 |
パラメーター |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.RANGE
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(C) |
コマンドの説明 | TairRoaring キーの指定された範囲内で値が 1 のビットのオフセットを返します。範囲は閉区間です。 |
パラメーター |
|
出力 |
|
例 | 事前に コマンド例: 出力例: |
TR.RANGEBITARRAY
項目 | 説明 |
構文 |
|
時間計算量 | O(C) |
コマンドの説明 | TairRoaring キーの指定された範囲内で 0 と 1 のビット値で構成される文字列を取得します。範囲は閉区間です。 |
パラメーター |
|
出力 |
|
例 | 事前に コマンド例: 出力例: |
TR.MIN
項目 | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | TairRoaring キーで値が 1 の最初のビットのオフセットを取得します。値が 1 のビットがない場合、-1 の値が返されます。 |
パラメーター |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.MAX
項目 | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | Roaring Bitmap で値が 1 の最後のビットのオフセットを取得します。値が 1 のビットがない場合、-1 が返されます。 |
オプション |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.STAT
項目 | 説明 |
構文 |
|
時間計算量 | O(M) |
コマンドの説明 | 指定された TairRoaring キーの統計情報を返します。情報には、コンテナーの数とメモリ使用量が含まれます。 |
パラメーター |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.JACCARD
項目 | 説明 |
構文 |
|
時間計算量 | O(M) |
コマンドの説明 | 2 つの TairRoaring キーのジャカード類似係数を取得します。係数が高いほど、類似性が高くなります。 説明 このコマンドは、クラスターインスタンスのスロットをまたいで存在するキーには使用できません。 |
パラメーター |
|
出力 |
|
例 | コマンド例: 出力例: |
TR.CONTAINS
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(M) |
コマンドの説明 | key2 に key1 が含まれているかどうかを確認します。はいの場合、key1 は key2 のサブセットであり、値 1 が返されます。それ以外の場合、key1 は key2 のサブセットではなく、値 0 が返されます。 説明 このコマンドは、クラスターインスタンスのスロットをまたいで存在するキーには使用できません。 |
options |
|
出力 |
|
例 | 事前に コマンド例: 出力例: |
TR.RANK
項目 | 説明 |
構文 |
|
時間計算量 | O(M) |
コマンドの説明 | 最初のビットから指定されたビットまでの範囲内で値が 1 のビット数を取得します。範囲は閉区間です。 |
オプション |
|
出力 |
|
例 | 事前に コマンド例: 出力例: |
エラーメッセージ
エラーメッセージ | 説明 |
| 不正なオブジェクトタイプ: キーは TairRoaring オブジェクトではありません。 |
| 不正なパラメータータイプ: パラメーター値を 32 ビット整数に変換できません。 |
| 無効なパラメーター:
|
| TairRoaring キーはすでに存在しており、そのデータを上書きすることはできません。 説明 このエラーは TairRoaring V2.2 で修正されました。 |
| Roaring Bitmap オブジェクトが存在しません。この操作はサポートされていません。 説明 このエラーは TairRoaring V2.2 で修正されました。 |