TairCpc是基于CPC(Compressed Probability Counting)压缩算法开发的数据结构,支持仅占用很小的内存空间对采样数据进行高性能计算。
背景信息
在大数据实时决策场景中,通常会将业务日志流入实时计算系统完成计算,然后将计算结果存储至在线存储系统,最终由实时规则或决策系统进行决策,例如:
防控信用卡欺诈交易:快速判断刷卡环境是否可信,若发现异常则需第一时间拦截交易。
防控黄牛团伙恶意牟利:实时识别并阻止通过虚拟设备、虚假地址等方式损害平台利益的行为。
您可以利用TairCpc将实时数据,按不同的去重维度,结构化地存储到Tair数据库中,即可在高速的访问场景中直接获得结果,实现存储、计算一体化。同时TairCpc提供多重聚合运算,可以在纳秒级聚合数据结果,具备实时风控的能力。
TairCpc简介
CPC是一种高性能数据去重算法,可以将不同的值作为数据流进行计数,支持将多个数据块合并、去重,获得去重后的总计数。相比HLL(Hyperloglog)算法,在相同精度下,CPC大约可节省40%内存空间。
同时,TairCpc在开源CPC算法的基础上,将误差率优化至0.008%(开源CPC为0.67%;HLL误差率为1.95%)。
主要特征
内存占用低,支持增量读写,实现IO最小化。
高性能去重,同时拥有超高去重精度。
误差率稳定收敛。
典型场景
银行安全系统
秒杀限购
防控用户(或黄牛团伙)恶意牟利
前提条件
注意事项
操作对象为Tair实例中的TairCpc数据。
命令列表
表 1. TairCpc命令
命令 | 语法 | 说明 |
| 在指定TairCpc中添加item。若TairCpc不存在则自动新建,若待添加的item已存在于目标TairCpc中,则不会进行操作。 | |
| 获取指定TairCpc去重后的基数估算值,返回值的数据类型为double类型,您可以仅取整数部分(忽略小数点后的数据)。 | |
| 在指定TairCpc中添加item,返回更新后的基数估算值。若TairCpc不存在则自动新建。 | |
| 在指定TairCpc中添加item,并返回更新后的基数估算值和其与更新前的差值。若返回的差值为1则表示写入成功且不存在重复;若为0则表示已存在当前item。若TairCpc不存在则自动新建。 | |
| 在指定TairCpc中,向目标timestamp对应的时间窗口添加item。若TairCpc不存在则自动新建, 例如目标key为计算近10分钟内每分钟的数据:可以设置 | |
| 获取指定TairCpc中目标timestamp所在时间窗口的基数估算值。 | |
| 获取指定TairCpc的指定时间段内(包含指定时间点)各个时间窗口的基数估算值。 | |
| 获取指定TairCpc在指定时间点至往前range(含当前窗口)个时间窗口内,时间窗口合并、去重后的基数估算值。 | |
| 在指定TairCpc中,向目标timestamp对应的时间窗口添加item,并返回该时间窗口更新后的基数估算值。若TairCpc不存在则自动新建,新建参数用法与CPC.ARRAY.UPDATE一致。 | |
| 在指定TairCpc中,向目标timestamp对应的时间窗口添加item,并返回该时间窗口更新后的基数估算值和其与更新前的差值。若返回的差值为1,则表示写入成功且不存在重复;若为0则表示已存在当前item。若TairCpc不存在则自动新建,新建参数用法与CPC.ARRAY.UPDATE一致。 | |
| 使用原生Redis的DEL命令可以删除一条或多条TairCpc数据。 |
本文的命令语法定义如下:
大写关键字
:命令关键字。斜体
:变量。[options]
:可选参数,不在括号中的参数为必选。A|B
:该组参数互斥,请进行二选一或多选一。...
:前面的内容可重复。
CPC.UPDATE
类别 | 说明 |
类别 | 说明 |
语法 |
|
时间复杂度 | O(1) |
命令描述 | 在指定TairCpc中添加item。若TairCpc不存在则自动新建,若待添加的item已存在于目标TairCpc中,则不会进行操作。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
CPC.ESTIMATE
类别 | 说明 |
类别 | 说明 |
语法 |
|
时间复杂度 | O(1) |
命令描述 | 获取指定TairCpc去重后的基数估算值,返回值的数据类型为double类型,您可以仅取整数部分(忽略小数点后的数据)。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
CPC.UPDATE2EST
类别 | 说明 |
类别 | 说明 |
语法 |
|
时间复杂度 | O(1) |
命令描述 | 在指定TairCpc中添加item,返回更新后的基数估算值。若TairCpc不存在则自动新建。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
CPC.UPDATE2JUD
类别 | 说明 |
类别 | 说明 |
语法 |
|
时间复杂度 | O(1) |
命令描述 | 在指定TairCpc中添加item,并返回更新后的基数估算值和其与更新前的差值。若返回的差值为1则表示写入成功且不存在重复;若为0则表示已存在当前item。若TairCpc不存在则自动新建。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
CPC.ARRAY.UPDATE
类别 | 说明 |
类别 | 说明 |
语法 |
|
时间复杂度 | O(1) |
命令描述 | 在指定TairCpc中,向目标timestamp对应的时间窗口添加item。若TairCpc不存在则自动新建, 例如目标key为计算近10分钟内每分钟的数据:可以设置 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
CPC.ARRAY.ESTIMATE
类别 | 说明 |
类别 | 说明 |
语法 |
|
时间复杂度 | O(1) |
命令描述 | 获取指定TairCpc中目标timestamp所在时间窗口的基数估算值。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
CPC.ARRAY.ESTIMATE.RANGE
类别 | 说明 |
类别 | 说明 |
语法 |
|
时间复杂度 | O(1) |
命令描述 | 获取指定TairCpc的指定时间段内(包含指定时间点)各个时间窗口的基数估算值。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
CPC.ARRAY.ESTIMATE.RANGE.MERGE
类别 | 说明 |
类别 | 说明 |
语法 |
|
时间复杂度 | O(1) |
命令描述 | 获取指定TairCpc在指定时间点至往前range(含当前窗口)个时间窗口内,时间窗口合并、去重后的基数估算值。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
CPC.ARRAY.UPDATE2EST
类别 | 说明 |
类别 | 说明 |
语法 |
|
时间复杂度 | O(1) |
命令描述 | 在指定TairCpc中,向目标timestamp对应的时间窗口添加item,并返回该时间窗口更新后的基数估算值。若TairCpc不存在则自动新建,新建参数用法与CPC.ARRAY.UPDATE一致。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
CPC.ARRAY.UPDATE2JUD
类别 | 说明 |
类别 | 说明 |
语法 |
|
时间复杂度 | O(1) |
命令描述 | 在指定TairCpc中,向目标timestamp对应的时间窗口添加item,并返回该时间窗口更新后的基数估算值和其与更新前的差值。若返回的差值为1,则表示写入成功且不存在重复;若为0则表示已存在当前item。若TairCpc不存在则自动新建,新建参数用法与CPC.ARRAY.UPDATE一致。 |
选项 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
- 本页导读 (1)
- 背景信息
- TairCpc简介
- 前提条件
- 注意事项
- 命令列表
- CPC.UPDATE
- CPC.ESTIMATE
- CPC.UPDATE2EST
- CPC.UPDATE2JUD
- CPC.ARRAY.UPDATE
- CPC.ARRAY.ESTIMATE
- CPC.ARRAY.ESTIMATE.RANGE
- CPC.ARRAY.ESTIMATE.RANGE.MERGE
- CPC.ARRAY.UPDATE2EST
- CPC.ARRAY.UPDATE2JUD