Todos os produtos
Search
Central de documentação

ApsaraDB RDS:RabitQ index

Última atualização: Jun 26, 2026

O RDS PostgreSQL suporta indexação RabitQ por meio da extensão pgvector. O RabitQ comprime vetores com taxa de até 32x, aumenta o throughput de busca e mantém alto recall.

Como o RabitQ funciona

O RabitQ é um método de quantização vetorial fundamentado em três princípios centrais:

  • Quantização de alta compressão: o RabitQ projeta vetores em uma esfera unitária e codifica cada um como uma string de D bits usando vértices de hipercubo. Isso alcança compressão de até 32x em relação aos arrays float32 usados pelo pgvector nativo.

  • Cálculo rápido de distâncias: o RabitQ reduz os cálculos de distância vetorial a operações bitwise e popcount em strings binárias, significativamente mais rápidas que a aritmética baseada em float.

  • Estimador não enviesado: o RabitQ fornece um limite teórico comprovado para o erro de estimativa de distância. Durante a busca, os candidatos são filtrados pela distância estimada; um pequeno subconjunto é então reclassificado com distâncias exatas para garantir alto recall.

Pré-requisitos

A instância do RDS PostgreSQL deve atender aos seguintes requisitos:

  • RDS PostgreSQL 14 ou superior.

  • Versão de kernel secundária 20260330 ou superior.

  • pgvector 0.8.0.2 ou superior instalado.

Introdução

O Alibaba Cloud estende o método de acesso nativo ivfflat integrando a quantização RabitQ. O clustering IVF é executado primeiro e, em seguida, o RabitQ quantiza os vetores de cada cluster. Essa abordagem é totalmente compatível com índices ivfflat existentes.

Etapa 1: Verifique e atualize a extensão pgvector

Conecte-se ao banco de dados de destino e verifique a versão do pgvector. Se a versão for anterior à 0.8.0.2, atualize a extensão.

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";

Etapa 2: Crie um índice ivf-RabitQ

Execute o seguinte comando SQL para crie um índice ivf-RabitQ:

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

items é a tabela de destino, embedding é a coluna de vetores e rabitq_vector_cosine_ops é o operador de similaridade de cosseno do RabitQ. lists define o número de centróides IVF. Escolha um valor de acordo com o tamanho do conjunto de dados.

Etapa 3: Ajuste os parâmetros de busca

O ivf-RabitQ acrescenta os seguintes parâmetros de busca aos parâmetros padrão do ivfflat. Ajuste-os no nível da sessão com o comando SET.

Parâmetro

Padrão

Valor

Descrição

ivf_rabitq.epsilon

1.9

[0.1, 4.0]

Coeficiente de margem de erro para o estimador de distância. Valores mais altos aumentam o recall.

ivf_rabitq.topk

10

[1, 32768]

Número de vetores a serem reclassificados com distância exata. Defina esse valor igual à quantidade de resultados que deseja recuperar.

ivf_rabitq.max_rerank_scan_tuples

5000

[1, INT_MAX]

Número máximo de vetores candidatos a examinar na reclassificação.

Benchmarks de desempenho

Ambiente de teste

Item

Descrição

Instância do RDS PostgreSQL

  • Versão principal: RDS PostgreSQL 17

  • Versão de kernel secundária: 20260330

  • Tipo de instância: pg.x4.2xlarge.1

Ferramenta de teste

ann-benchmarks

Conjunto de dados de teste

dbpedia-openai-1000k-angular

Parâmetros de teste

  • ivfflat.lists = 1000

  • ivfflat.nprobes é incrementado em etapas: [1, 2, 4, 8, 16, 32, 50, 100]

Comparação de criação de índice

Comparação de tempo de criação e tamanho do índice usando o mesmo conjunto de dados e os mesmos parâmetros:

Tipo de índice

Tempo de criação

Tamanho do índice

ivfflat (nativo)

95,32s

7820 MB

ivf-RabitQ

78,72s

248 MB

O ivf-RabitQ reduz o tamanho do índice de 7820 MB para 248 MB — uma taxa de compressão superior a 31x — e ainda é criado mais rapidamente.

Comparação de desempenho de consultas

O ivf-RabitQ entrega até 2,9x mais QPS com menos de 1% de perda de recall em relação ao ivfflat nativo:

Parâmetro

QPS Ivfflat

QPS Ivf-RabitQ

Fator de aceleração

Recall Ivfflat

Recall 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%

Curva QPS-recall comparando os seguintes tipos de índice:

  • pgvector: índice HNSW nativo (pgvector da comunidade).

  • pgvector_ivfflat: índice ivfflat nativo (pgvector da comunidade).

  • pgvector_ivfrabitq: índice ivf-RabitQ.

  • pgvector_hnsw_rabitq: índice HNSW-RabitQ com reclassificação.

  • pgvector_hnsw_rabitq_without_refine: índice HNSW-RabitQ sem reclassificação, usando distâncias quantizadas diretamente para maior throughput.

image.png