すべてのプロダクト
Search
ドキュメントセンター

Tair (Redis® OSS-Compatible):Cpc

最終更新日:Sep 12, 2024

TairCpcは、圧縮確率カウント (CPC) スケッチに基づいて開発されたデータ構造です。 小さなメモリフットプリントで、サンプリングされたデータに対する高性能コンピューティングをサポートします。

背景情報

ビッグデータを含むリアルタイムの意思決定シナリオでは、リアルタイムコンピューティングシステムが着信ビジネスログを処理し、オンラインストレージシステムが処理結果を格納し、その後、リアルタイムルールベースまたは意思決定システムが意思決定を行う。 サンプルシナリオ:

  • クレジットカード詐欺の防止と管理: このシナリオでは、システムは安全な環境でクレジットカードが使用されているかどうかを判断し、疑わしい取引をできるだけ早く停止する必要があります。

  • チケットスキャルピングの防止と制御: このシナリオでは、システムは、仮想デバイスと偽のIPアドレスを使用してプラットフォームの利益を損なうアクティビティをリアルタイムで特定して停止する必要があります。

この場合、TairCpcを使用して、ディメンションごとにリアルタイムのデータを重複排除し、そのデータをTairデータベースに構造的に格納できます。 これらの操作により、データへの高速アクセスと、ストレージとコンピューティングの統合が可能になります。 TairCpcは、複数の集計操作もサポートしているため、データをナノ秒以内に集計し、リアルタイムのリスク管理を実現できます。

概要

CPCは、データストリームとして異なる値をカウントする高性能データ重複排除アルゴリズムです。 データブロックを結合し、ブロックを重複排除して合計数を取得できます。 CPCの詳細については、Back to the Future: さらに最適なカーディナリティ推定アルゴリズムを参照してください。 CPCは、約40% 少ないメモリでHLLと同じレベルの精度を実現します。

オープンソースCPCに基づいて開発されたTairCpcは、オープンソースCPCの0.67% やHLLの1.95% とは対照的に、エラー率を0.008% に減らします。

主な特徴

  • 低メモリ使用量、増分読み取りと書き込み、および最小限のI/O

  • 高性能で超高精度な重複排除

  • 安定したエラー率の低下

典型的なシナリオ

  • 銀行向けセキュリティシステム

  • フラッシュ販売

  • チケットスキャルピングの予防と管理

前提条件

インスタンスは、次のいずれかの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。 このタイムウィンドウの範囲外で生成されたデータは上書きされ、削除されます。 SIZEWINは、キーが作成された時点でのみ有効です。

説明

たとえば、過去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型ですが、小数を無視して最も近い整数に丸めることができます。

パラメーター

  • key: TairCpcキーの名前。

Output

  • 操作が成功した場合、DOUBLEタイプの見積もりが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

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

  • 操作が成功した場合、更新後のDOUBLEタイプの見積もりが返されます。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

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

  • 操作が成功した場合、更新後の新しい推定値と、元の推定値と新しい推定値の差が返されます。 新しい推定値と差は両方ともDOUBLEタイプです。

  • それ以外の場合、エラーメッセージが返されます。

例:

サンプルコマンド:

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。 このタイムウィンドウの範囲外で生成されたデータは上書きされ、削除されます。 SIZEWINは、キーが作成された時点でのみ有効です。

説明

たとえば、過去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キーのカーディナリティ推定値を取得します。

パラメーター

  • key: このコマンドを実行して管理するTairCpcキーの名前。

  • timestamp: UNIXタイムスタンプ。 単位:ミリ秒。

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は范囲パラメータの値です。

パラメーター

  • key: このコマンドを実行して管理するTairCpcキーの名前。

  • timestamp: クエリする時間範囲の先頭。 単位:ミリ秒。 値はUNIXタイムスタンプである必要があります。

  • range: クエリする時間ウィンドウの数。

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