À grande échelle, la sélection d'utilisateurs par tags — fondement du marketing de précision, des recommandations personnalisées et de la gestion des risques — exige une structure de données bitmap capable de gérer des centaines de millions d'entrées éparses, d'exécuter des intersections d'ensembles en quelques millisecondes et de rester stable sous charge concurrente. Les bitmaps natifs de Redis Open-Source Edition atteignent rapidement leurs limites sur ces trois points. TairRoaring, une structure de données roaring bitmap intégrée à Tair (Enterprise Edition), lève ces contraintes grâce à des optimisations internes qui ne nécessitent aucune modification côté application.
Pourquoi les bitmaps natifs sont insuffisants
Les bitmaps de Redis Open-Source Edition imposent trois contraintes qui s'aggravent avec le volume de données :
| Contrainte | Impact |
|---|---|
| Limite de taille de l'espace de clés | Gaspillage important d'espace pour les données de tags éparses |
| Opérations bitmap basées sur des chaînes | Nécessite un code d'orchestration côté client ; le temps aller-retour (RTT) triple |
| Clés volumineuses | Instabilité du cluster lors de charges de travail intensives de tagging |
Comment TairRoaring résout ces contraintes
TairRoaring optimise l'algorithme roaring bitmap via trois techniques transparentes au sein du moteur Tair (Enterprise Edition) :
Index à deux niveaux et conteneurs dynamiques : TairRoaring partitionne les données bitmap grâce à une structure d'index à deux niveaux. Il gère automatiquement les jeux de données denses et épars sans sharding manuel, éliminant ainsi le problème des clés volumineuses au niveau de la structure de données.
SIMD, vectorisation et algorithmes popcount : Le parallélisme SIMD (Single Instruction, Multiple Data) et la vectorisation, combinés au comptage de cardinalité par popcount, accélèrent les opérations d'intersection (
AND), d'union (OR) et de différence (DIFF).Environnement d'exécution haute performance de Tair : Les opérations s'exécutent directement dans le moteur Tair (Enterprise Edition), garantissant la stabilité des performances du cluster même sous de fortes charges concurrentes à grande échelle.
Par rapport aux bitmaps natifs de Redis, TairRoaring réduit la consommation mémoire et accélère les opérations sur les collections. Comparé à l'orchestration bitmap basée sur des chaînes, il offre une latence plus faible et un débit plus élevé en supprimant les RTT supplémentaires.
Sélectionner des utilisateurs par tag
La sélection d'utilisateurs par tags suit un pipeline en trois étapes.
Étape 1 : Construire le magasin de tags
Stockez les caractéristiques des utilisateurs issues des bases de données relationnelles en utilisant des schémas de lignes, organisés par dimension (par exemple, démographie, comportement et préférences).
Traitez les données brutes à la demande pour générer les mappages UID-vers-tag.
Synchronisez les mappages mis à jour vers TairRoaring. Les mises à jour sont généralement effectuées dans un délai de deux jours suivant la génération des données métier correspondantes.
Étape 2 : Interroger les utilisateurs
Une fois le magasin de tags en place, TairRoaring prend en charge trois modèles de requête.
Vérifier si un utilisateur possède un tag spécifique
Pour déterminer si user1 possède le Tag-A (numéro de série 16161) :
TR.GETBIT user1 16161
Trouver les utilisateurs correspondant à une combinaison de tags
Pour trouver tous les utilisateurs qui possèdent à la fois le Tag-B et le Tag-C :
TR.BITOP result AND Tag-B Tag-C
TR.BITOP prend en charge les opérateurs AND, OR et DIFF, ce qui vous permet de construire des groupes d'utilisateurs logiques arbitraires à partir de vos ensembles de tags.
Recherche inversée : vérifier si un tag est associé à un UID spécifique
Dans les scénarios de gestion des risques, les tags représentent des attributs et les UID sont les valeurs vérifiées. Inversez l'ordre des clés pour effectuer la recherche :
TR.GETBIT Tag-A user1
Étape 3 : Utiliser les résultats de la requête
Transmettez le bitmap de sortie ou la valeur de bit aux systèmes en aval pour un traitement ultérieur.