TairCpc est une structure de données fondée sur le sketch CPC (Compressed Probability Counting). Elle offre une estimation de la cardinalité d'une grande précision tout en consommant nettement moins de mémoire que HyperLogLog (HLL), ce qui la rend idéale pour la déduplication en temps réel des flux de données à haut débit.
Contexte
Les systèmes décisionnels en temps réel traitent les événements métier dès leur arrivée, stockent les résultats pour un accès rapide et appliquent des règles pour agir immédiatement. Le comptage de cardinalité à faible latence y est crucial, notamment dans les cas suivants :
Prévention de la fraude par carte bancaire : Déterminez si une carte est utilisée dans un contexte suspect et bloquez les transactions douteuses au plus tôt.
Lutte contre la revente abusive de billets : Détectez et bloquez les bots utilisant des dispositifs virtuels et de fausses adresses IP avant qu'ils n'acquièrent du stock.
TairCpc vous permet de dédupliquer les données entrantes par dimension, de stocker le sketch dans une instance Tair et d'exécuter des requêtes d'agrégation en quelques nanosecondes, combinant ainsi stockage et calcul au sein d'une même couche.
Vue d'ensemble
CPC compte les valeurs distinctes dans un flux de données et prend en charge la fusion de plusieurs sketches pour obtenir un total combiné. Par rapport à HLL, CPC atteint la même précision avec environ 40 % de mémoire en moins.
TairCpc étend l'implémentation open source de CPC et réduit le taux d'erreur à 0,008 %, contre 0,67 % pour CPC standard et 1,95 % pour HLL.
Considérez TairCpc comme une alternative économe en mémoire à un ensemble (Set) pour le comptage d'éléments uniques :
| Opération | Équivalent Set | Équivalent TairCpc |
|---|---|---|
| Ajouter un élément | SADD key item |
CPC.UPDATE key item |
| Compter les éléments uniques | SCARD key |
CPC.ESTIMATE key |
Contrairement à un ensemble, TairCpc ne stocke pas les éléments bruts ; il conserve un sketch compact qui approxime le nombre d'éléments. Ce compromis permet une agrégation infra-milliseconde à très grande échelle.
Fonctionnalités clés
Faible empreinte mémoire grâce aux lectures et écritures incrémentielles, et aux E/S minimales
Déduplication haute performance et ultra-précise
Taux d'erreur réduit à 0,008 % (contre 0,67 % pour CPC open source et 1,95 % pour HLL)
Cas d'utilisation
Systèmes de sécurité bancaire : Combien de comptes ou d'appareils distincts ont effectué une action donnée au cours de la dernière minute ?
Ventes flash : Combien d'utilisateurs uniques ont tenté d'acheter cet article durant la fenêtre temporelle actuelle ?
Lutte contre la revente abusive de billets : Combien d'adresses IP distinctes ont envoyé des requêtes depuis cette session au cours des 10 dernières secondes ?
Prérequis
Avant de commencer, vérifiez que votre instance appartient à l'une des séries Tair suivantes :
Instance basée sur DRAM. Si l'instance est compatible avec Redis 5.0, la version mineure doit être 1.7.20 ou ultérieure.
Instance optimisée pour la mémoire persistante avec une version mineure 1.2.3.3 ou ultérieure.
Maintenez votre instance à jour avec la dernière version mineure pour bénéficier du maximum de fonctionnalités et d'une stabilité optimale. Pour les instructions de mise à niveau, consultez Mettre à jour la version mineure d'une instance . Pour les instances en cluster et les instances avec séparation lecture/écriture, mettez également à jour les nœuds proxy vers la dernière version mineure afin que toutes les commandes s'exécutent correctement.
Notes d'utilisation
Les données TairCpc sont stockées sur une instance Tair.
Commandes prises en charge
| Commande | Syntaxe | Description | |||
|---|---|---|---|---|---|
| CPC.UPDATE | `CPC.UPDATE key item [EX |
EXAT |
PX |
PXAT time]` |
Ajoute un élément à une clé. Crée la clé si elle n'existe pas. Aucune opération si l'élément existe déjà. |
| CPC.ESTIMATE | CPC.ESTIMATE key |
Renvoie l'estimation de la cardinalité dédupliquée pour une clé sous forme de DOUBLE. | |||
| CPC.UPDATE2EST | `CPC.UPDATE2EST key item [EX |
EXAT |
PX |
PXAT time]` |
Ajoute un élément et renvoie l'estimation DOUBLE mise à jour. Crée la clé si elle n'existe pas. |
| CPC.UPDATE2JUD | `CPC.UPDATE2JUD key item [EX |
EXAT |
PX |
PXAT time]` |
Ajoute un élément et renvoie l'estimation mise à jour ainsi que la différence. Utilisez la différence pour détecter les doublons : 1 = nouvel élément, 0 = doublon. |
| CPC.ARRAY.UPDATE | `CPC.ARRAY.UPDATE key timestamp item [EX |
EXAT |
PX |
PXAT time] [SIZE size] [WIN window_length]` |
Ajoute un élément à la fenêtre temporelle correspondant à l'horodatage donné. |
| CPC.ARRAY.ESTIMATE | CPC.ARRAY.ESTIMATE key timestamp |
Renvoie l'estimation de la cardinalité pour la fenêtre temporelle correspondant à l'horodatage donné. | |||
| CPC.ARRAY.ESTIMATE.RANGE | CPC.ARRAY.ESTIMATE.RANGE key start_time end_time |
Renvoie les estimations de cardinalité par fenêtre sur une plage temporelle (intervalle fermé). | |||
| CPC.ARRAY.ESTIMATE.RANGE.MERGE | CPC.ARRAY.ESTIMATE.RANGE.MERGE key timestamp range |
Renvoie l'estimation fusionnée et dédupliquée à partir d'un horodatage et couvrant N fenêtres temporelles en arrière. | |||
| CPC.ARRAY.UPDATE2EST | `CPC.ARRAY.UPDATE2EST key timestamp item [EX |
EXAT |
PX |
PXAT time] [SIZE size] [WIN window_length]` |
Ajoute un élément à une fenêtre temporelle et renvoie l'estimation mise à jour pour cette fenêtre. |
| CPC.ARRAY.UPDATE2JUD | `CPC.ARRAY.UPDATE2JUD key timestamp item [EX |
EXAT |
PX |
PXAT time] [SIZE size] [WIN window_length]` |
Ajoute un élément à une fenêtre temporelle et renvoie l'estimation mise à jour ainsi que la différence pour cette fenêtre. |
| DEL | DEL key [key ...] |
Supprime une ou plusieurs clés TairCpc. |
Conventions de syntaxe
MAJUSCULES: mot-clé de commande_italique_: variable[option]: paramètre facultatifA|B: options mutuellement exclusives — spécifiez-en une seule...: le paramètre précédent peut être répété
CPC.UPDATE
Ajoute un élément à une clé TairCpc. Crée la clé si elle n'existe pas. Si l'élément existe déjà, la commande n'a aucun effet.
Syntaxe
CPC.UPDATE key item [EX|EXAT|PX|PXAT time]
Complexité temporelle O(1)
Paramètres
| Paramètre | Description |
|---|---|
key |
La clé TairCpc à mettre à jour. |
item |
L'élément à ajouter. |
EX time |
Durée d'expiration relative en secondes. La clé n'expire pas si ce paramètre est omis. |
EXAT time |
Heure d'expiration absolue sous forme d'horodatage UNIX en secondes. La clé n'expire pas si ce paramètre est omis. |
PX time |
Durée d'expiration relative en millisecondes. La clé n'expire pas si ce paramètre est omis. |
PXAT time |
Heure d'expiration absolue sous forme d'horodatage UNIX en millisecondes. La clé n'expire pas si ce paramètre est omis. |
Valeur de retour
OKen cas de succès.Un message d'erreur dans le cas contraire.
Exemple
CPC.UPDATE foo f1 EX 3600
OK
CPC.ESTIMATE
Renvoie l'estimation de la cardinalité d'une clé TairCpc après déduplication. La valeur de retour est de type DOUBLE ; arrondissez-la à l'entier le plus proche pour obtenir un compte utilisable.
Syntaxe
CPC.ESTIMATE key
Complexité temporelle : O(1)
Paramètres
| Paramètre | Description |
|---|---|
key |
La clé TairCpc à interroger. |
Valeur de retour
L'estimation de la cardinalité de type DOUBLE en cas de succès.
Un message d'erreur dans le cas contraire.
Exemple
CPC.ESTIMATE foo
"19.000027716212127"
CPC.UPDATE2EST
Ajoute un élément à une clé TairCpc et renvoie l'estimation de la cardinalité mise à jour en un seul aller-retour. Crée la clé si elle n'existe pas.
Syntaxe
CPC.UPDATE2EST key item [EX|EXAT|PX|PXAT time]
Complexité temporelle : O(1)
Paramètres
| Paramètre | Description |
|---|---|
key |
La clé TairCpc à mettre à jour. |
item |
L'élément à ajouter. |
EX time |
Durée d'expiration relative en secondes. La clé n'expire pas si ce paramètre est omis. |
EXAT time |
Heure d'expiration absolue sous forme d'horodatage UNIX en secondes. La clé n'expire pas si ce paramètre est omis. |
PX time |
Durée d'expiration relative en millisecondes. La clé n'expire pas si ce paramètre est omis. |
PXAT time |
Heure d'expiration absolue sous forme d'horodatage UNIX en millisecondes. La clé n'expire pas si ce paramètre est omis. |
Valeur de retour
L'estimation de la cardinalité de type DOUBLE après la mise à jour en cas de succès.
Un message d'erreur dans le cas contraire.
Exemple
CPC.UPDATE2EST foo f3
"3.0000004768373003"
CPC.UPDATE2JUD
Ajoute un élément à une clé TairCpc et renvoie à la fois l'estimation de la cardinalité mise à jour et la différence par rapport à l'estimation précédente. Utilisez cette différence pour déterminer si l'élément était nouveau ou existait déjà, sans avoir besoin d'une commande de lecture séparée.
Si la différence renvoyée est 1, l'élément était nouveau (aucun doublon).
Si la différence renvoyée est 0, l'élément existait déjà (doublon détecté).
Crée la clé si elle n'existe pas.
Syntaxe
CPC.UPDATE2JUD key item [EX|EXAT|PX|PXAT time]
Complexité temporelle : O(1)
Paramètres
| Paramètre | Description |
|---|---|
key |
La clé TairCpc à mettre à jour. |
item |
L'élément à ajouter. |
EX time |
Durée d'expiration relative en secondes. La clé n'expire pas si ce paramètre est omis. |
EXAT time |
Heure d'expiration absolue sous forme d'horodatage UNIX en secondes. La clé n'expire pas si ce paramètre est omis. |
PX time |
Durée d'expiration relative en millisecondes. La clé n'expire pas si ce paramètre est omis. |
PXAT time |
Heure d'expiration absolue sous forme d'horodatage UNIX en millisecondes. La clé n'expire pas si ce paramètre est omis. |
Valeur de retour
En cas de succès : deux valeurs DOUBLE — la nouvelle estimation de la cardinalité, puis la différence entre les nouvelles et précédentes estimations.
Un message d'erreur dans le cas contraire.
Exemple
CPC.UPDATE2JUD foo f20
1) "20.000027716212127" // New cardinality estimate: 20
2) "1.0000014901183398" // Difference: 20 - 19 = 1 (new item)
CPC.ARRAY.UPDATE
Ajoute un élément à une clé de tableau TairCpc dans la fenêtre temporelle dans laquelle tombe l'horodatage donné. Crée la clé si elle n'existe pas.
Une clé de tableau TairCpc maintient une fenêtre glissante de sketches CPC. Chaque appel écrit les données dans la fenêtre temporelle correspondant à l'horodatage. La plage temporelle totale observable est de SIZE × WIN millisecondes. Les données en dehors de cette plage sont écrasées à mesure que de nouvelles données arrivent.
SIZEetWINne s'appliquent que lors de la première création de la clé. Les écritures ultérieures sur la même clé utilisent les valeurs définies au moment de la création.
Exemple : Pour suivre les événements uniques par minute au cours des 10 dernières minutes, définissez SIZE sur 10 et WIN sur 60000. Lorsque les données de la 11e minute arrivent, les données de la première minute sont écrasées.
Syntaxe
CPC.ARRAY.UPDATE key timestamp item [EX|EXAT|PX|PXAT time] [SIZE size] [WIN window_length]
Complexité temporelle : O(1)
Paramètres
| Paramètre | Description |
|---|---|
key |
La clé de tableau TairCpc à mettre à jour. |
timestamp |
Horodatage UNIX en millisecondes indiquant la fenêtre temporelle dans laquelle écrire. |
item |
L'élément à ajouter. |
EX time |
Durée d'expiration relative en secondes. La clé n'expire pas si ce paramètre est omis. |
EXAT time |
Heure d'expiration absolue sous forme d'horodatage UNIX en secondes. La clé n'expire pas si ce paramètre est omis. |
PX time |
Durée d'expiration relative en millisecondes. La clé n'expire pas si ce paramètre est omis. |
PXAT time |
Heure d'expiration absolue sous forme d'horodatage UNIX en millisecondes. La clé n'expire pas si ce paramètre est omis. |
SIZE size |
Nombre de fenêtres temporelles. Valeur par défaut : 10. Plage valide : 1–1000. Maintenez cette valeur inférieure à 120 pour les charges de travail typiques. |
WIN window_length |
Durée de chaque fenêtre temporelle en millisecondes. Valeur par défaut : 60000 (1 minute). |
Valeur de retour
OKen cas de succès.Un message d'erreur dans le cas contraire.
Exemple
CPC.ARRAY.UPDATE foo 1645584510000 f1 SIZE 120 WIN 10000
OK
CPC.ARRAY.ESTIMATE
Renvoie l'estimation de la cardinalité pour la fenêtre temporelle dans laquelle tombe l'horodatage donné.
Syntaxe
CPC.ARRAY.ESTIMATE key timestamp
Complexité temporelle : O(1)
Paramètres
| Paramètre | Description |
|---|---|
key |
La clé de tableau TairCpc à interroger. |
timestamp |
Horodatage UNIX en millisecondes identifiant la fenêtre temporelle à interroger. |
Valeur de retour
L'estimation de la cardinalité pour la fenêtre temporelle correspondante en cas de succès.
Un message d'erreur dans le cas contraire.
Exemple
CPC.ARRAY.ESTIMATE foo 1645584532000
"2"
CPC.ARRAY.ESTIMATE.RANGE
Renvoie les estimations de cardinalité par fenêtre pour toutes les fenêtres temporelles comprises dans une plage temporelle spécifiée (intervalle fermé). Chaque valeur de la réponse correspond à une fenêtre temporelle.
Syntaxe
CPC.ARRAY.ESTIMATE.RANGE key start_time end_time
Complexité temporelle : O(1)
Paramètres
| Paramètre | Description |
|---|---|
key |
La clé de tableau TairCpc à interroger. |
start_time |
Début de la plage temporelle sous forme d'horodatage UNIX en millisecondes. |
end_time |
Fin de la plage temporelle sous forme d'horodatage UNIX en millisecondes. |
Valeur de retour
Une liste d'estimations de cardinalité, une par fenêtre temporelle dans la plage, en cas de succès.
Un message d'erreur dans le cas contraire.
Exemple
CPC.ARRAY.ESTIMATE.RANGE foo 1645584510000 1645584550000
1) "2"
2) "0"
3) "1"
4) "0"
5) "0"
CPC.ARRAY.ESTIMATE.RANGE.MERGE
Renvoie une estimation unique de la cardinalité fusionnée et dédupliquée, en agrégeant N fenêtres temporelles à partir de l'horodatage donné et en remontant le temps.
Utilisez cette commande lorsque vous avez besoin d'un compte unique unifié sur plusieurs fenêtres temporelles — par exemple, le nombre total d'utilisateurs uniques au cours des 5 dernières minutes — plutôt que de comptes par fenêtre.
Syntaxe
CPC.ARRAY.ESTIMATE.RANGE.MERGE key timestamp range
Complexité temporelle : O(1)
Paramètres
| Paramètre | Description |
|---|---|
key |
La clé de tableau TairCpc à interroger. |
timestamp |
Point de départ de la requête sous forme d'horodatage UNIX en millisecondes. |
range |
Nombre de fenêtres temporelles à fusionner, en comptant à rebours à partir de l'horodatage. |
Valeur de retour
L'estimation de la cardinalité fusionnée et dédupliquée en cas de succès.
Un message d'erreur dans le cas contraire.
Exemple
CPC.ARRAY.ESTIMATE.RANGE.MERGE foo 1645584510000 3
"6"
CPC.ARRAY.UPDATE2EST
Ajoute un élément à la fenêtre temporelle correspondant à l'horodatage donné et renvoie l'estimation de la cardinalité mise à jour pour cette fenêtre en un seul aller-retour. Crée la clé si elle n'existe pas.
Utilise les mêmes paramètres de création de clé que CPC.ARRAY.UPDATE.
Syntaxe
CPC.ARRAY.UPDATE2EST key timestamp item [EX|EXAT|PX|PXAT time] [SIZE size] [WIN window_length]
Complexité temporelle : O(1)
Paramètres
| Paramètre | Description |
|---|---|
key |
La clé de tableau TairCpc à mettre à jour. |
timestamp |
Horodatage UNIX en millisecondes identifiant la fenêtre temporelle cible. |
item |
L'élément à ajouter. |
EX time |
Durée d'expiration relative en secondes. La clé n'expire pas si ce paramètre est omis. |
EXAT time |
Heure d'expiration absolue sous forme d'horodatage UNIX en secondes. La clé n'expire pas si ce paramètre est omis. |
PX time |
Durée d'expiration relative en millisecondes. La clé n'expire pas si ce paramètre est omis. |
PXAT time |
Heure d'expiration absolue sous forme d'horodatage UNIX en millisecondes. La clé n'expire pas si ce paramètre est omis. |
SIZE size |
Nombre de fenêtres temporelles. Valeur par défaut : 10. Plage valide : 1–1000. Maintenez cette valeur inférieure à 120 pour les charges de travail typiques. |
WIN window_length |
Durée de chaque fenêtre temporelle en millisecondes. Valeur par défaut : 60000 (1 minute). |
Valeur de retour
L'estimation de la cardinalité de type DOUBLE mise à jour pour la fenêtre temporelle en cas de succès.
Un message d'erreur dans le cas contraire.
Exemple
CPC.ARRAY.UPDATE2EST foo 1645584530000 f3
"3"
CPC.ARRAY.UPDATE2JUD
Ajoute un élément à la fenêtre temporelle correspondant à l'horodatage donné et renvoie à la fois l'estimation de la cardinalité mise à jour et la différence par rapport à l'estimation précédente pour cette fenêtre. Crée la clé si elle n'existe pas.
Si la différence renvoyée est 1, l'élément était nouveau (aucun doublon dans cette fenêtre).
Si la différence renvoyée est 0, l'élément existait déjà dans cette fenêtre.
Utilise les mêmes paramètres de création de clé que CPC.ARRAY.UPDATE.
Syntaxe
CPC.ARRAY.UPDATE2JUD key timestamp item [EX|EXAT|PX|PXAT time] [SIZE size] [WIN window_length]
Complexité temporelle : O(1)
Paramètres
| Paramètre | Description |
|---|---|
key |
La clé de tableau TairCpc à mettre à jour. |
timestamp |
Horodatage UNIX en millisecondes identifiant la fenêtre temporelle cible. |
item |
L'élément à ajouter. |
EX time |
Durée d'expiration relative en secondes. La clé n'expire pas si ce paramètre est omis. |
EXAT time |
Heure d'expiration absolue sous forme d'horodatage UNIX en secondes. La clé n'expire pas si ce paramètre est omis. |
PX time |
Durée d'expiration relative en millisecondes. La clé n'expire pas si ce paramètre est omis. |
PXAT time |
Heure d'expiration absolue sous forme d'horodatage UNIX en millisecondes. La clé n'expire pas si ce paramètre est omis. |
SIZE size |
Nombre de fenêtres temporelles. Valeur par défaut : 10. Plage valide : 1–1000. Maintenez cette valeur inférieure à 120 pour les charges de travail typiques. |
WIN window_length |
Durée de chaque fenêtre temporelle en millisecondes. Valeur par défaut : 60000 (1 minute). |
Valeur de retour
En cas de succès : deux valeurs — l'estimation de la cardinalité mise à jour pour la fenêtre temporelle, puis la différence entre les nouvelles et précédentes estimations.
Un message d'erreur dans le cas contraire.
Exemple
CPC.ARRAY.UPDATE2JUD foo 1645584530000 f7
1) "8" // New cardinality estimate for this window: 8
2) "1" // Difference: 8 - 7 = 1 (new item)