TairCpc は、圧縮確率カウンティング (CPC) スケッチに基づいて開発されたデータ構造です。最小限のメモリを使用しながら、サンプルデータに対する高性能コンピューティングを可能にします。
背景情報 ビッグデータを含むリアルタイムの意思決定シナリオでは、リアルタイムコンピューティングシステムが受信ビジネスログを処理し、オンラインストレージシステムが処理結果を保存し、リアルタイムのルールベースまたは意思決定システムが意思決定を行います。シナリオ例:
これらのケースでは、TairCpc を使用してディメンションごとにリアルタイムデータを重複排除し、データを Tair データベースに構造化されたフォーマットで保存できます。これらの操作により、データへの高速アクセスとストレージとコンピューティングの統合が可能になります。TairCpc はまた、複数の集約操作をサポートしており、ナノ秒以内にデータを集約し、リアルタイムのリスク管理を提供します。
概要 CPC は、データストリームとして異なる値をカウントする高性能なデータ重複排除アルゴリズムです。データブロックを結合し、それらを重複排除して合計数を取得できます。CPC は、約 40% 少ないメモリで HLL と同レベルの精度を達成します。
オープンソースの CPC に基づいて開発された TairCpc は、オープンソース CPC の 0.67% および HLL の 1.95% と比較して、エラー率を 0.008% に削減します。
主な特徴
代表的なシナリオ
銀行向けのセキュリティシステム
フラッシュセール
チケット転売の防止と管理
前提条件 インスタンスは、次のいずれかの Tair シリーズタイプです。
説明 最新のマイナーバージョンは、より多くの機能と高い安定性を提供します。インスタンスを最新のマイナーバージョンに更新することをお勧めします。詳細については、「インスタンスのマイナーバージョンを更新する 」をご参照ください。インスタンスがクラスターインスタンスまたは読み書き分離インスタンスである場合は、すべてのコマンドが期待どおりに実行されるように、インスタンスのプロキシノードを最新のマイナーバージョンに更新することをお勧めします。
注意事項 管理する TairCpc データは Tair インスタンスに保存されます。
サポートされているコマンド 表 1. TairCpc コマンド
コマンド
構文
説明
CPC.UPDATE
CPC.UPDATE key item [EX|EXAT|PX|PXAT time ]
指定された TairCpc キーに項目を追加します。キーが存在しない場合は、キーが作成されます。項目がキーにすでに存在する場合、項目は追加されません。
CPC.ESTIMATE
CPC.ESTIMATE ke y
重複排除後、指定された TairCpc キーのカーディナリティ推定値を取得します。戻り値は DOUBLE 型ですが、小数を無視して最も近い整数に丸めることができます。
CPC.UPDATE2EST
CPC.UPDATE2EST key item [EX|EXAT|PX|PXAT time ]
指定された TairCpc キーに項目を追加し、キーの更新されたカーディナリティ推定値を返します。キーが存在しない場合は、キーが作成されます。
CPC.UPDATE2JUD
CPC.UPDATE2JUD key item [EX|EXAT|PX|PXAT time ]
指定された TairCpc キーに項目を追加し、更新後のキーの新しいカーディナリティ推定値と、元の推定値と新しい推定値の差を返します。差が 1 の場合は項目が追加され、重複はありません。差が 0 の場合は、項目はすでに存在します。キーが存在しない場合は、キーが作成されます。
CPC.ARRAY.UPDATE
CPC.ARRAY.UPDATE key timestamp item [EX|EXAT|PX|PXAT time ] [SIZE size ] [WIN window_length ]
指定されたタイムスタンプが属するタイムウィンドウ内の指定された TairCpc キーに項目を追加します。キーが存在しない場合は、キーが作成されます。SIZE はタイムウィンドウの数を示し、WIN は各タイムウィンドウの長さを示します。長さはミリ秒単位で測定されます。データストリームがキーに追加されると、キーは更新されます。このプロセス中に、タイムウィンドウ範囲内に生成されたデータが保存されます。タイムウィンドウ範囲は、次の数式を使用して計算されます: タイムウィンドウ範囲 = SIZE * WIN 。このタイムウィンドウ範囲外で生成されたデータは上書きされ、削除されます。SIZE と WIN は、キーが作成された時点でのみ有効です。
説明 たとえば、過去 10 分間に 1 分あたりに生成されたキー内のデータ量を計算する場合、SIZE を 10 (10 タイムウィンドウ) に設定し、WIN を 60000 (各タイムウィンドウで 1 分) に設定できます。この場合、11 分目に生成されたデータをキーに書き込むと、最初の 1 分間に生成されたデータは上書きされて削除されます。
CPC.ARRAY.ESTIMATE
CPC.ARRAY.ESTIMATE key timestamp
指定されたタイムスタンプが属するタイムウィンドウ内の指定された TairCpc キーのカーディナリティ推定値を取得します。
CPC.ARRAY.ESTIMATE.RANGE
CPC.ARRAY.ESTIMATE.RANGE key start_time end_time
指定された時間範囲内のタイムウィンドウにわたる指定された TairCpc キーのカーディナリティ推定値を取得します。時間範囲は閉区間です。
CPC.ARRAY.ESTIMATE.RANGE.MERGE
CPC.ARRAY.ESTIMATE.RANGE.MERGE key timestamp range
特定の時点から N 番目のタイムウィンドウまで後方にマージおよび重複排除した後、指定された TairCpc キーのカーディナリティ推定値を取得します。N は range パラメーターの値です。
CPC.ARRAY.UPDATE2EST
CPC.ARRAY.UPDATE2EST key timestamp item [EX|EXAT|PX|PXAT time ] [SIZE size ] [WIN window_length ]
指定された TairCpc キーの指定されたタイムスタンプが属するタイムウィンドウに項目を追加し、タイムウィンドウ内のキーの更新されたカーディナリティ推定値を返します。キーが存在しない場合は、キーが作成されます。このコマンドは、CPC.ARRAY.UPDATE コマンドで使用されるパラメーターと一致するパラメーターを使用してキーを作成します。
CPC.ARRAY.UPDATE2JUD
CPC.ARRAY.UPDATE2JUD key timestamp item [EX|EXAT|PX|PXAT time ] [SIZE size ] [WIN window_length ]
指定された TairCpc キーの指定されたタイムスタンプが属するタイムウィンドウに項目を追加し、タイムウィンドウ内のキーの更新されたカーディナリティ推定値と、元の推定値と更新された推定値の差を返します。差が 1 の場合は項目が追加され、重複はありません。差が 0 の場合は、項目はすでに存在します。キーが存在しない場合は、キーが作成されます。このコマンドは、CPC.ARRAY.UPDATE コマンドで使用されるパラメーターと一致するパラメーターを使用してキーを作成します。
DEL
DEL key [key ...]
1 つ以上の TairCpc キーを削除します。
説明 次のリストは、このトピックで使用されるコマンド構文の規則について説明しています。
大文字のキーワード : コマンドキーワードを示します。
斜体のテキスト : 変数を示します。
[options] : 角括弧で囲まれたパラメーターはオプションであることを示します。角括弧で囲まれていないパラメーターは指定する必要があります。
A|B : 縦棒 (|) で区切られたパラメーターは相互排他的であることを示します。パラメーターのいずれか 1 つのみを指定できます。
... : この記号の前のパラメーターを繰り返し指定できることを示します。
CPC.UPDATE 項目
説明
構文
CPC.UPDATE key item [EX|EXAT|PX|PXAT time ]
時間計算量
O(1)
コマンドの説明
指定された TairCpc キーに項目を追加します。キーが存在しない場合は、キーが作成されます。項目がキーにすでに存在する場合、項目は追加されません。
パラメーター
key : このコマンドを実行して管理する TairCpc キーの名前。
item : 追加する項目。
EX : キーの相対的な有効期限。単位: 秒。このパラメーターを指定しない場合、キーは有効期限切れになりません。
EXAT : キーの絶対的な有効期限。単位: 秒。値は UNIX タイムスタンプである必要があります。このパラメーターを指定しない場合、キーは有効期限切れになりません。
PX : キーの相対的な有効期限。単位: ミリ秒。このパラメーターを指定しない場合、キーは有効期限切れになりません。
PXAT : キーの絶対的な有効期限。単位: ミリ秒。値は UNIX タイムスタンプである必要があります。このパラメーターを指定しない場合、キーは有効期限切れになりません。
出力
操作が成功した場合、OK が返されます。
それ以外の場合は、エラーメッセージが返されます。
例
コマンド例:
CPC.UPDATE foo f1 EX 3600出力例:
OK
CPC.ESTIMATE 項目
説明
構文
CPC.ESTIMATE ke y
時間計算量
O(1)
コマンドの説明
重複排除後、指定された TairCpc キーのカーディナリティ推定値を取得します。戻り値は DOUBLE 型ですが、小数を無視して最も近い整数に丸めることができます。
パラメーター
出力
例
コマンド例:
CPC.ESTIMATE foo出力例:
"19.000027716212127"
CPC.UPDATE2EST 項目
説明
構文
CPC.UPDATE2EST key item [EX|EXAT|PX|PXAT time ]
時間計算量
O(1)
コマンドの説明
指定された TairCpc キーに項目を追加し、キーの更新されたカーディナリティ推定値を返します。キーが存在しない場合は、キーが作成されます。
パラメーター
key : このコマンドを実行して管理する TairCpc キーの名前。
item : 追加する項目。
EX : キーの相対的な有効期限。単位: 秒。このパラメーターを指定しない場合、キーは有効期限切れになりません。
EXAT : キーの絶対的な有効期限。単位: 秒。値は UNIX タイムスタンプである必要があります。このパラメーターを指定しない場合、キーは有効期限切れになりません。
PX : キーの相対的な有効期限。単位: ミリ秒。このパラメーターを指定しない場合、キーは有効期限切れになりません。
PXAT : キーの絶対的な有効期限。単位: ミリ秒。値は UNIX タイムスタンプである必要があります。このパラメーターを指定しない場合、キーは有効期限切れになりません。
出力
例
コマンド例:
CPC.UPDATE2EST foo f3出力例:
"3.0000004768373003"
CPC.UPDATE2JUD 項目
説明
構文
CPC.UPDATE2JUD key item [EX|EXAT|PX|PXAT time ]
時間計算量
O(1)
コマンドの説明
指定された TairCpc キーに項目を追加し、更新後のキーの新しいカーディナリティ推定値と、元の推定値と新しい推定値の差を返します。差が 1 の場合は項目が追加され、重複はありません。差が 0 の場合は、項目はすでに存在します。キーが存在しない場合は、キーが作成されます。
パラメーター
key : このコマンドを実行して管理する TairCpc キーの名前。
item : 追加する項目。
EX : キーの相対的な有効期限。単位: 秒。このパラメーターを指定しない場合、キーは有効期限切れになりません。
EXAT : キーの絶対的な有効期限。単位: 秒。値は UNIX タイムスタンプである必要があります。このパラメーターを指定しない場合、キーは有効期限切れになりません。
PX : キーの相対的な有効期限。単位: ミリ秒。このパラメーターを指定しない場合、キーは有効期限切れになりません。
PXAT : キーの絶対的な有効期限。単位: ミリ秒。値は UNIX タイムスタンプである必要があります。このパラメーターを指定しない場合、キーは有効期限切れになりません。
出力
例
コマンド例:
CPC.UPDATE2JUD foo f20出力例:
1) "20.000027716212127" // 更新後のキーの新しいカーディナリティ推定値は 20 です。
2) "1.0000014901183398" // 20 - 19 = 1
CPC.ARRAY.UPDATE 項目
説明
構文
CPC.ARRAY.UPDATE key timestamp item [EX|EXAT|PX|PXAT time ] [SIZE size ] [WIN window_length ]
時間計算量
O(1)
コマンドの説明
指定されたタイムスタンプが属するタイムウィンドウ内の指定された TairCpc キーに項目を追加します。キーが存在しない場合は、キーが作成されます。SIZE はタイムウィンドウの数を示し、WIN は各タイムウィンドウの長さを示します。長さはミリ秒単位で測定されます。データストリームがキーに追加されると、キーは更新されます。このプロセス中に、タイムウィンドウ範囲内に生成されたデータが保存されます。タイムウィンドウ範囲は、次の数式を使用して計算されます: タイムウィンドウ範囲 = SIZE * WIN 。このタイムウィンドウ範囲外で生成されたデータは上書きされ、削除されます。SIZE と WIN は、キーが作成された時点でのみ有効です。
説明 たとえば、過去 10 分間に 1 分あたりに生成されたキー内のデータ量を計算する場合、SIZE を 10 (10 タイムウィンドウ) に設定し、WIN を 60000 (各タイムウィンドウで 1 分) に設定できます。この場合、11 分目に生成されたデータをキーに書き込むと、最初の 1 分間に生成されたデータは上書きされて削除されます。
パラメーター
key : このコマンドを実行して管理する TairCpc キーの名前。
timestamp : UNIX タイムスタンプ。単位: ミリ秒。
item : 追加する項目。
EX : キーの相対的な有効期限。単位: 秒。このパラメーターを指定しない場合、キーは有効期限切れになりません。
EXAT : キーの絶対的な有効期限。単位: 秒。値は UNIX タイムスタンプである必要があります。このパラメーターを指定しない場合、キーは有効期限切れになりません。
PX : キーの相対的な有効期限。単位: ミリ秒。このパラメーターを指定しない場合、キーは有効期限切れになりません。
PXAT : キーの絶対的な有効期限。単位: ミリ秒。値は UNIX タイムスタンプである必要があります。このパラメーターを指定しない場合、キーは有効期限切れになりません。
SIZE : タイムウィンドウの数。デフォルト値: 10。有効値: 1~1000。このパラメーターは 120 未満の値に設定することをお勧めします。
WIN : 各タイムウィンドウの長さ。単位: ミリ秒。デフォルト値: 60000。60000 ミリ秒は 1 分に相当します。
出力
操作が成功した場合、OK が返されます。
それ以外の場合は、エラーメッセージが返されます。
例
コマンド例:
CPC.ARRAY.UPDATE foo 1645584510000 f1 SIZE 120 WIN 10000出力例:
OK
CPC.ARRAY.ESTIMATE 項目
説明
構文
CPC.ARRAY.ESTIMATE key timestamp
時間計算量
O(1)
コマンドの説明
指定されたタイムスタンプが属するタイムウィンドウ内の指定された TairCpc キーのカーディナリティ推定値を取得します。
パラメーター
出力
例
コマンド例:
CPC.ARRAY.ESTIMATE foo 1645584532000出力例:
"2"
CPC.ARRAY.ESTIMATE.RANGE 項目
説明
構文
CPC.ARRAY.ESTIMATE.RANGE key start_time end_time
時間計算量
O(1)
コマンドの説明
指定された時間範囲内のタイムウィンドウにわたる指定された TairCpc キーのカーディナリティ推定値を取得します。時間範囲は閉区間です。
オプション
key : このコマンドを実行して管理する TairCpc キーの名前。
start_time : クエリする時間範囲の開始。単位: ミリ秒。値は UNIX タイムスタンプである必要があります。
end_time : クエリする時間範囲の終了。単位: ミリ秒。値は UNIX タイムスタンプである必要があります。
出力
例
コマンド例:
CPC.ARRAY.ESTIMATE.RANGE foo 1645584510000 1645584550000出力例:
1) "2"
2) "0"
3) "1"
4) "0"
5) "0"
CPC.ARRAY.ESTIMATE.RANGE.MERGE 項目
説明
構文
CPC.ARRAY.ESTIMATE.RANGE.MERGE key timestamp range
時間計算量
O(1)
コマンドの説明
特定の時点から N 番目のタイムウィンドウまで後方にマージおよび重複排除した後、指定された TairCpc キーのカーディナリティ推定値を取得します。N は range パラメーターの値です。
パラメーター
出力
例
コマンド例:
CPC.ARRAY.ESTIMATE.RANGE.MERGE foo 1645584510000 3出力例:
"6"
CPC.ARRAY.UPDATE2EST 項目
説明
構文
CPC.ARRAY.UPDATE2EST key timestamp item [EX|EXAT|PX|PXAT time ] [SIZE size ] [WIN window_length ]
時間計算量
O(1)
コマンドの説明
指定された TairCpc キーの指定されたタイムスタンプが属するタイムウィンドウに項目を追加し、タイムウィンドウ内のキーの更新されたカーディナリティ推定値を返します。キーが存在しない場合は、キーが作成されます。このコマンドは、CPC.ARRAY.UPDATE コマンドで使用されるパラメーターと一致するパラメーターを使用してキーを作成します。
パラメーター
key : このコマンドを実行して管理する TairCpc キーの名前。
timestamp : UNIX タイムスタンプ。単位: ミリ秒。
item : 追加する項目。
EX : キーの相対的な有効期限。単位: 秒。このパラメーターを指定しない場合、キーは有効期限切れになりません。
EXAT : キーの絶対的な有効期限。単位: 秒。値は UNIX タイムスタンプである必要があります。このパラメーターを指定しない場合、キーは有効期限切れになりません。
PX : キーの相対的な有効期限。単位: ミリ秒。このパラメーターを指定しない場合、キーは有効期限切れになりません。
PXAT : キーの絶対的な有効期限。単位: ミリ秒。値は UNIX タイムスタンプである必要があります。このパラメーターを指定しない場合、キーは有効期限切れになりません。
SIZE : タイムウィンドウの数。デフォルト値: 10。有効値: 1~1000。このパラメーターは 120 未満の値に設定することをお勧めします。
WIN : 各タイムウィンドウの長さ。単位: ミリ秒。デフォルト値: 60000。60000 ミリ秒は 1 分に相当します。
出力
例
コマンド例:
CPC.ARRAY.UPDATE2EST foo 1645584530000 f3出力例:
"3"
CPC.ARRAY.UPDATE2JUD 項目
説明
構文
CPC.ARRAY.UPDATE2JUD key timestamp item [EX|EXAT|PX|PXAT time ] [SIZE size ] [WIN window_length ]
時間計算量
O(1)
コマンドの説明
指定された TairCpc キーの指定されたタイムスタンプが属するタイムウィンドウに項目を追加し、タイムウィンドウ内のキーの更新されたカーディナリティ推定値と、元の推定値と更新された推定値の差を返します。差が 1 の場合は項目が追加され、重複はありません。差が 0 の場合は、項目はすでに存在します。キーが存在しない場合は、キーが作成されます。このコマンドは、CPC.ARRAY.UPDATE コマンドで使用されるパラメーターと一致するパラメーターを使用してキーを作成します。
パラメーター
key : このコマンドを実行して管理する TairCpc キーの名前。
timestamp : UNIX タイムスタンプ。単位: ミリ秒。
item : 追加する項目。
EX : キーの相対的な有効期限。単位: 秒。このパラメーターを指定しない場合、キーは有効期限切れになりません。
EXAT : キーの絶対的な有効期限。単位: 秒。値は UNIX タイムスタンプである必要があります。このパラメーターを指定しない場合、キーは有効期限切れになりません。
PX : キーの相対的な有効期限。単位: ミリ秒。このパラメーターを指定しない場合、キーは有効期限切れになりません。
PXAT : キーの絶対的な有効期限。単位: ミリ秒。値は UNIX タイムスタンプである必要があります。このパラメーターを指定しない場合、キーは有効期限切れになりません。
SIZE : タイムウィンドウの数。デフォルト値: 10。有効値: 1~1000。このパラメーターは 120 未満の値に設定することをお勧めします。
WIN : 各タイムウィンドウの長さ。単位: ミリ秒。デフォルト値: 60000。60000 ミリ秒は 1 分に相当します。
出力
例
コマンド例:
CPC.ARRAY.UPDATE2JUD foo 1645584530000 f7出力例:
1) "8" // 更新後のキーの新しいカーディナリティ推定値は 8 です。
2) "1" // 8 - 7 = 1