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

Tair (Redis® OSS-Compatible):Cpc

最終更新日:Nov 09, 2025

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

背景情報

ビッグデータを含むリアルタイムの意思決定シナリオでは、リアルタイムコンピューティングシステムが受信ビジネスログを処理し、オンラインストレージシステムが処理結果を保存し、リアルタイムのルールベースまたは意思決定システムが意思決定を行います。シナリオ例:

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

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

これらのケースでは、TairCpc を使用してディメンションごとにリアルタイムデータを重複排除し、データを Tair データベースに構造化されたフォーマットで保存できます。これらの操作により、データへの高速アクセスとストレージとコンピューティングの統合が可能になります。TairCpc はまた、複数の集約操作をサポートしており、ナノ秒以内にデータを集約し、リアルタイムのリスク管理を提供します。

概要

CPC は、データストリームとして異なる値をカウントする高性能なデータ重複排除アルゴリズムです。データブロックを結合し、それらを重複排除して合計数を取得できます。CPC は、約 40% 少ないメモリで HLL と同レベルの精度を達成します。

オープンソースの CPC に基づいて開発された TairCpc は、オープンソース CPC の 0.67% および HLL の 1.95% と比較して、エラー率を 0.008% に削減します。

主な特徴

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

  • 高性能かつ超高精度の重複排除

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

代表的なシナリオ

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

  • フラッシュセール

  • チケット転売の防止と管理

前提条件

インスタンスは、次のいずれかの Tair シリーズタイプです。

  • DRAM ベース。インスタンスが Redis 5.0 と互換性がある場合、インスタンスのマイナーバージョンは 1.7.20 以降である必要があります。

  • マイナーバージョンが 1.2.3.3 以降の永続メモリ最適化インスタンス

説明

最新のマイナーバージョンは、より多くの機能と高い安定性を提供します。インスタンスを最新のマイナーバージョンに更新することをお勧めします。詳細については、「インスタンスのマイナーバージョンを更新する」をご参照ください。インスタンスがクラスターインスタンスまたは読み書き分離インスタンスである場合は、すべてのコマンドが期待どおりに実行されるように、インスタンスのプロキシノードを最新のマイナーバージョンに更新することをお勧めします。

注意事項

管理する TairCpc データは Tair インスタンスに保存されます。

サポートされているコマンド

表 1. TairCpc コマンド

コマンド

構文

説明

CPC.UPDATE

CPC.UPDATE key item [EX|EXAT|PX|PXAT time]

指定された TairCpc キーに項目を追加します。キーが存在しない場合は、キーが作成されます。項目がキーにすでに存在する場合、項目は追加されません。

CPC.ESTIMATE

CPC.ESTIMATE key

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

説明

たとえば、過去 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 key

時間計算量

O(1)

コマンドの説明

重複排除後、指定された TairCpc キーのカーディナリティ推定値を取得します。戻り値は DOUBLE 型ですが、小数を無視して最も近い整数に丸めることができます。

パラメーター

  • key: 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 タイムスタンプである必要があります。このパラメーターを指定しない場合、キーは有効期限切れになりません。

出力

  • 操作が成功した場合、更新後の DOUBLE 型の推定値が返されます。

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

コマンド例:

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 タイムスタンプである必要があります。このパラメーターを指定しない場合、キーは有効期限切れになりません。

出力

  • 操作が成功した場合、更新後の新しい推定値と、元の推定値と新しい推定値の差が返されます。新しい推定値と差はどちらも DOUBLE 型です。

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

コマンド例:

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。このタイムウィンドウ範囲外で生成されたデータは上書きされ、削除されます。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 分に相当します。

出力

  • 操作が成功した場合、OK が返されます。

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

コマンド例:

CPC.ARRAY.UPDATE foo 1645584510000 f1 SIZE 120 WIN 10000

出力例:

OK

CPC.ARRAY.ESTIMATE

項目

説明

構文

CPC.ARRAY.ESTIMATE key timestamp

時間計算量

O(1)

コマンドの説明

指定されたタイムスタンプが属するタイムウィンドウ内の指定された TairCpc キーのカーディナリティ推定値を取得します。

パラメーター

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

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

出力

  • 操作が成功した場合、タイムウィンドウ内のキーのカーディナリティ推定値が返されます。

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

コマンド例:

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

パラメーター

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

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

  • 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