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