Tous les produits
Search
Centre de documentation

ApsaraDB RDS:RabitQ index

Dernière mise à jour :Aug 08, 2026

RDS PostgreSQL prend en charge l'indexation RabitQ via l'extension pgvector. RabitQ compresse les vecteurs avec un taux allant jusqu'à 32x, tout en augmentant le débit de recherche et en maintenant un rappel élevé.

Fonctionnement de RabitQ

RabitQ est une méthode de quantification vectorielle fondée sur trois principes clés :

  • Quantification à haute compression : RabitQ projette les vecteurs sur une sphère unitaire et encode chacun d'eux sous forme de chaîne binaire de D bits en utilisant les sommets d'un hypercube. Cette approche permet d'atteindre une compression jusqu'à 32 fois supérieure par rapport aux tableaux float32 utilisés nativement par pgvector.

  • Calcul rapide des distances : RabitQ réduit les calculs de distance entre vecteurs à des opérations bit à bit et de comptage de bits (popcount) sur des chaînes binaires, ce qui est nettement plus rapide que l'arithmétique basée sur les nombres à virgule flottante.

  • Estimateur sans biais : RabitQ offre une borne théorique prouvée sur l'erreur d'estimation de la distance. Lors de la recherche, les candidats sont filtrés selon la distance estimée, puis un petit sous-ensemble est reclassé à l'aide des distances exactes pour garantir un rappel élevé.

Prérequis

Votre instance RDS PostgreSQL doit répondre aux exigences suivantes :

  • RDS PostgreSQL version 14 ou ultérieure.

  • Version mineure du noyau 20260330 ou ultérieure.

  • Extension pgvector version 0.8.0.2 ou ultérieure installée.

Premiers pas

Alibaba Cloud étend la méthode d'accès native ivfflat en intégrant la quantification RabitQ. Le clustering IVF s'exécute en premier, puis RabitQ quantifie les vecteurs de chaque cluster. Cette solution est entièrement compatible avec les index ivfflat existants.

Étape 1 : Vérifier et mettre à niveau l'extension pgvector

Connectez-vous à la base de données cible et vérifiez la version de pgvector. Mettez à niveau l'extension si sa version est antérieure à 0.8.0.2.

postgres=# \dx vector
                           List of installed extensions
  Name  | Version | Schema |                     Description
--------+---------+--------+------------------------------------------------------
 vector | 0.8.0.2 | public | vector data type and ivfflat and hnsw access methods
(1 row)

postgres=# ALTER EXTENSION vector UPDATE TO "0.8.0.2";

Étape 2 : Créer un index ivf-RabitQ

Exécutez la commande SQL suivante pour créer un index ivf-RabitQ :

CREATE INDEX ON items USING ivfflat (embedding rabitq_vector_cosine_ops) WITH (lists=1000);

items correspond à la table cible, embedding à la colonne de vecteurs et rabitq_vector_cosine_ops à l'opérateur de similarité cosinus RabitQ. Le paramètre lists définit le nombre de centroïdes IVF. Choisissez une valeur adaptée à la taille de votre jeu de données.

Étape 3 : Ajuster les paramètres de recherche

ivf-RabitQ ajoute les paramètres de recherche suivants aux paramètres standards d'ivfflat. Ajustez-les au niveau de la session à l'aide de la commande SET.

Paramètre

Valeur par défaut

Plage

Description

ivf_rabitq.epsilon

1,9

[0,1, 4,0]

Coefficient de marge d'erreur pour l'estimateur de distance. Des valeurs plus élevées augmentent le rappel.

ivf_rabitq.topk

10

[1, 32768]

Nombre de vecteurs à reclasser à l'aide de la distance exacte. Définissez cette valeur sur le nombre de résultats que vous souhaitez récupérer.

ivf_rabitq.max_rerank_scan_tuples

5000

[1, INT_MAX]

Nombre maximal de vecteurs candidats à analyser pour le reclassement.

Benchmarks de performance

Environnement de test

Élément

Description

Instance RDS PostgreSQL

  • Version majeure : RDS PostgreSQL 17

  • Version mineure du noyau : 20260330

  • Type d'instance : pg.x4.2xlarge.1

Outil de test

ann-benchmarks

Jeu de données de test

dbpedia-openai-1000k-angular

Paramètres de test

  • ivfflat.lists = 1000

  • ivfflat.nprobes est incrémenté par paliers : [1, 2, 4, 8, 16, 32, 50, 100]

Comparaison de la création d'index

Comparaison du temps de construction et de la taille de l'index en utilisant le même jeu de données et les mêmes paramètres :

Type d'index

Temps de construction

Taille de l'index

ivfflat (natif)

95,32 s

7820 Mo

ivf-RabitQ

78,72 s

248 Mo

ivf-RabitQ réduit la taille de l'index de 7820 Mo à 248 Mo, soit un taux de compression supérieur à 31x, tout en accélérant la phase de construction.

Comparaison des performances de requête

ivf-RabitQ offre un débit QPS jusqu'à 2,9 fois supérieur avec une perte de rappel inférieure à 1 % par rapport à ivfflat natif :

Paramètre

QPS Ivfflat

QPS Ivf-RabitQ

Facteur d'accélération

Rappel Ivfflat

Rappel Ivf-RabitQ

nprobes = 1

566,36

1033,56

1,83x

66,87 %

69,38 %

nprobes = 2

350,77

758,88

2,16x

79,40 %

80,09 %

nprobes = 4

203,78

501,56

2,47x

87,84 %

87,96 %

nprobes = 8

110,98

298,43

2,69x

92,69 %

92,80 %

nprobes = 16

56,99

162,75

2,86x

95,71 %

95,28 %

nprobes = 32

28,56

53,98

1,89x

97,37 %

96,84 %

nprobes = 50

18,32

53,98

2,94x

98,05 %

97,71 %

nprobes = 100

9,26

26,74

2,89x

98,93 %

98,54 %

Courbe QPS-rappel comparant les types d'index suivants :

  • pgvector : Index HNSW natif (pgvector communautaire).

  • pgvector_ivfflat : Index ivfflat natif (pgvector communautaire).

  • pgvector_ivfrabitq : Index ivf-RabitQ.

  • pgvector_hnsw_rabitq : Index HNSW-RabitQ avec reclassement.

  • pgvector_hnsw_rabitq_without_refine : Index HNSW-RabitQ sans reclassement, utilisant directement les distances quantifiées pour un débit plus élevé.

image.png