Tous les produits
Search
Centre de documentation

ApsaraDB RDS:Utiliser l'extension roaringbitmap

Dernière mise à jour :Aug 24, 2026

Cette rubrique explique comment utiliser l'extension roaringbitmap fournie par ApsaraDB RDS for PostgreSQL pour améliorer les performances des requêtes.

Prérequis

L'instance RDS exécute PostgreSQL 12 ou une version ultérieure.

Remarque

Si votre instance RDS exécute PostgreSQL 17, la version mineure du moteur doit être 20241030 ou ultérieure.

Contexte

Dans un roaring bitmap, les entiers 32 bits sont divisés en 216 blocs. Les entiers de chaque bloc partagent les mêmes 16 bits de poids fort. Les 16 bits de poids faible sont stockés dans un conteneur. Un roaring bitmap utilise un tableau dynamique de conteneurs comme index principal. Il existe deux types de conteneurs : les conteneurs de type tableau pour les blocs clairsemés et les conteneurs de type bitmap pour les blocs denses. Un conteneur de type tableau peut stocker jusqu'à 4 096 entiers, tandis qu'un conteneur de type bitmap en stocke plus de 4 096.

Les roaring bitmaps exploitent cette structure de stockage pour récupérer rapidement des valeurs spécifiques. Ils proposent également des opérations binaires (AND, OR, XOR) entre les deux types de conteneurs, offrant ainsi d'excellentes performances en matière de stockage et de calcul.

Remarques sur l'utilisation

Pour garantir la stabilité de l'extension, nous vous recommandons de mettre à jour votre instance RDS vers la dernière version mineure du moteur.

Remarque

Pour plus d'informations sur la mise à jour de la version mineure du moteur d'une instance RDS, consultez la rubrique Mettre à niveau la version mineure du moteur.

Procédure

  1. Créez l'extension. Exemple :

    CREATE EXTENSION roaringbitmap;
  2. Créez une table destinée à stocker les données roaringbitmap. Exemple :

    CREATE TABLE t1 (id integer, bitmap roaringbitmap);
  3. Appelez la fonction rb_build pour insérer des données roaringbitmap. Exemple :

    -- Set the bit value of an array to 1.
    INSERT INTO t1 SELECT 1,RB_BUILD(ARRAY[1,2,3,4,5,6,7,8,9,200]);
    -- Set the bit values of multiple elements to 1 and aggregate the bit values into a roaring bitmap.  
    INSERT INTO t1 SELECT 2,RB_BUILD_AGG(e) FROM GENERATE_SERIES(1,100) e;
  4. Exécutez des opérations bitmap telles que OR, AND, XOR et ANDNOT. Exemple :

    SELECT RB_OR(a.bitmap,b.bitmap) FROM (SELECT bitmap FROM t1 WHERE id = 1) AS a,(SELECT bitmap FROM t1 WHERE id = 2) AS b;
  5. Effectuez des opérations d'agrégation bitmap telles que OR, AND, XOR et BUILD pour générer un nouveau roaring bitmap. Exemple :

    SELECT RB_OR_AGG(bitmap) FROM t1;
    SELECT RB_AND_AGG(bitmap) FROM t1;
    SELECT RB_XOR_AGG(bitmap) FROM t1;
    SELECT RB_BUILD_AGG(e) FROM GENERATE_SERIES(1,100) e;
  6. Calculez la cardinalité du roaring bitmap, c'est-à-dire le nombre de bits définis sur 1. Exemple :

    SELECT RB_CARDINALITY(bitmap) FROM t1;
  7. Récupérez les indices des bits définis sur 1. Exemple :

    SELECT RB_ITERATE(bitmap) FROM t1 WHERE id = 1;

Fonctions de calcul bitmap

Fonction

Entrée

Sortie

Description

Exemple

rb_build

integer[]

roaringbitmap

Crée un roaring bitmap à partir d'un tableau d'entiers.

rb_build('{1,2,3,4,5}')

rb_and

roaringbitmap,roaringbitmap

roaringbitmap

Exécute une opération AND.

rb_and(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_or

roaringbitmap,roaringbitmap

roaringbitmap

Exécute une opération OR.

rb_or(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_xor

roaringbitmap,roaringbitmap

roaringbitmap

Exécute une opération XOR.

rb_xor(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_andnot

roaringbitmap,roaringbitmap

roaringbitmap

Exécute une opération ANDNOT.

rb_andnot(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_cardinality

roaringbitmap

integer

Calcule la cardinalité.

rb_cardinality(rb_build('{1,2,3,4,5}'))

rb_and_cardinality

roaringbitmap,roaringbitmap

integer

Calcule la cardinalité issue d'une opération AND sur deux roaring bitmaps.

rb_and_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_or_cardinality

roaringbitmap,roaringbitmap

integer

Calcule la cardinalité issue d'une opération OR sur deux roaring bitmaps.

rb_or_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_xor_cardinality

roaringbitmap,roaringbitmap

integer

Calcule la cardinalité issue d'une opération XOR sur deux roaring bitmaps.

rb_xor_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_andnot_cardinality

roaringbitmap,roaringbitmap

integer

Calcule la cardinalité issue d'une opération ANDNOT sur deux roaring bitmaps.

rb_andnot_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_is_empty

roaringbitmap

boolean

Vérifie si un roaring bitmap est vide.

rb_is_empty(rb_build('{1,2,3,4,5}'))

rb_equals

roaringbitmap,roaringbitmap

boolean

Vérifie si deux roaring bitmaps sont identiques.

rb_equals(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_intersect

roaringbitmap,roaringbitmap

boolean

Vérifie si deux roaring bitmaps s'intersectent.

rb_intersect(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_remove

roaringbitmap,integer

roaringbitmap

Supprime un décalage spécifique d'un roaring bitmap.

rb_remove(rb_build('{1,2,3}'),3)

rb_flip

roaringbitmap,integer,integer

roaringbitmap

Inverse des décalages spécifiques dans un roaring bitmap.

rb_flip(rb_build('{1,2,3}'),2,3)

rb_minimum

roaringbitmap

integer

Renvoie le plus petit décalage dans un roaring bitmap. Si le roaring bitmap est vide, la valeur -1 est renvoyée.

rb_minimum(rb_build('{1,2,3}'))

rb_maximum

roaringbitmap

integer

Renvoie le plus grand décalage dans un roaring bitmap. Si le roaring bitmap est vide, la valeur 0 est renvoyée.

rb_maximum(rb_build('{1,2,3}'))

rb_rank

roaringbitmap,integer

integer

Renvoie le nombre d'éléments inférieurs ou égaux à un décalage spécifié dans un roaring bitmap.

rb_rank(rb_build('{1,2,3}'),3)

rb_iterate

roaringbitmap

setof integer

Renvoie une liste de décalages à partir d'un roaring bitmap.

rb_iterate(rb_build('{1,2,3}'))

Fonctions d'agrégation bitmap

Fonction

Entrée

Sortie

Description

Exemple

rb_build_agg

integer

roaringbitmap

Crée un roaring bitmap à partir d'un groupe de décalages.

rb_build_agg(1)

rb_or_agg

roaringbitmap

roaringbitmap

Exécute une opération d'agrégation OR.

rb_or_agg(rb_build('{1,2,3}'))

rb_and_agg

roaringbitmap

roaringbitmap

Exécute une opération d'agrégation AND.

rb_and_agg(rb_build('{1,2,3}'))

rb_xor_agg

roaringbitmap

roaringbitmap

Exécute une opération d'agrégation XOR.

rb_xor_agg(rb_build('{1,2,3}'))

rb_or_cardinality_agg

roaringbitmap

integer

Calcule la cardinalité issue d'une opération d'agrégation OR sur deux roaring bitmaps.

rb_or_cardinality_agg(rb_build('{1,2,3}'))

rb_and_cardinality_agg

roaringbitmap

integer

Calcule la cardinalité issue d'une opération d'agrégation AND sur deux roaring bitmaps.

rb_and_cardinality_agg(rb_build('{1,2,3}'))

rb_xor_cardinality_agg

roaringbitmap

integer

Calcule la cardinalité issue d'une opération d'agrégation XOR sur deux roaring bitmaps.

rb_xor_cardinality_agg(rb_build('{1,2,3}'))