All Products
Search
Document Center

ApsaraDB RDS:Indeks RabitQ

Last Updated:May 10, 2026

RDS PostgreSQL menyediakan fitur indeks RabitQ melalui ekstensi pgvector. RabitQ adalah metode kuantisasi vektor yang menawarkan rasio kompresi tinggi. Dibandingkan dengan indeks pgvector native, indeks RabitQ secara signifikan mengurangi ukuran indeks dan meningkatkan throughput pencarian vektor sambil mempertahankan recall yang tinggi. Topik ini menjelaskan prinsip inti indeks RabitQ, cara menggunakannya, serta tolok ukur performanya terhadap indeks pgvector native.

Latar Belakang

RabitQ adalah metode kuantisasi vektor lanjutan yang didasarkan pada tiga prinsip inti:

  • Kuantisasi vektor berkompressi tinggi: RabitQ memproyeksikan titik-titik dalam ruang berdimensi-D ke permukaan bola satuan dan menggunakan simpul-simpul hiperkubus terinskrpsi sebagai codebook-nya. Setiap koordinat bernilai 1/√D atau -1/√D. Hal ini memungkinkan setiap vektor direpresentasikan sebagai string bit sepanjang D-bit. Dibandingkan dengan pgvector native yang menggunakan array float32 untuk setiap vektor, teknik ini mencapai rasio kompresi hingga 32x.

  • Akselerasi perhitungan jarak: RabitQ mengubah perhitungan jarak antara dua vektor menjadi operasi bitwise dan popcount yang efisien pada string biner mereka, sehingga secara dramatis meningkatkan kecepatan perhitungan.

  • Estimator tidak bias: Berbeda dengan metode kuantisasi lainnya, RabitQ memberikan batas teoretis terbukti atas error antara jarak perkiraan dan jarak eksak. Selama pencarian vektor, Anda dapat menyaring kandidat menggunakan jarak perkiraan, lalu menghitung jarak eksak untuk subset kecil vektor dan melakukan reranking untuk memastikan hasil dengan akurasi tinggi.

Prasyarat

Untuk menggunakan indeks RabitQ, instans RDS PostgreSQL Anda harus memenuhi persyaratan berikut:

  • Versi utamanya adalah RDS PostgreSQL 14 atau lebih baru.

  • Versi kernel minornya adalah 20260330 atau lebih baru.

  • Ekstensi pgvector telah terinstal, dan versinya adalah 0.8.0.2 atau lebih baru.

Penggunaan

Alibaba Cloud telah memperluas metode akses ivfflat native di pgvector dengan mengintegrasikannya bersama RabitQ. Saat pembuatan indeks, pengelompokan IVF dilakukan terlebih dahulu, lalu kuantisasi RabitQ diterapkan pada vektor-vektor di setiap kluster, sehingga menjamin kompatibilitas maju penuh dengan indeks ivfflat yang sudah ada.

Langkah 1: Periksa dan upgrade ekstensi pgvector

Setelah terhubung ke database target, jalankan perintah SQL berikut untuk memeriksa versi ekstensi pgvector. Jika versinya lebih lama dari 0.8.0.2, lakukan upgrade.

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

Langkah 2: Buat indeks ivf-RabitQ

Jalankan perintah SQL berikut untuk membuat indeks ivf-RabitQ:

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

Dalam contoh ini, items adalah nama tabel target, embedding adalah nama kolom yang menyimpan data vektor, dan rabitq_vector_cosine_ops adalah operator RabitQ untuk kemiripan kosinus. lists adalah jumlah centroid untuk pengelompokan IVF. Kami menyarankan Anda memilih nilai yang sesuai berdasarkan ukuran data Anda.

Langkah 3: Sesuaikan parameter pencarian

Selain parameter pembuatan indeks dan kueri milik ivfflat, ivf-RabitQ memperkenalkan parameter pencarian yang tercantum dalam tabel berikut. Anda dapat menggunakan perintah SET untuk menyesuaikan parameter-parameter ini pada tingkat session.

Parameter

Default

Nilai

Deskripsi

ivf_rabitq.epsilon

1.9

[0.1, 4.0]

Koefisien untuk menghitung margin error dalam estimator tidak bias. Nilai yang lebih besar meningkatkan recall.

ivf_rabitq.topk

10

[1, 32768]

Jumlah vektor yang akan dihitung jarak eksaknya selama tahap rerank. Kami menyarankan mengatur nilai ini sama dengan jumlah vektor yang ingin Anda ambil.

ivf_rabitq.max_rerank_scan_tuples

5000

[1, INT_MAX]

Jumlah vektor yang dipindai untuk reranking.

Tolok ukur performa

Lingkungan pengujian

Item

Deskripsi

Instans RDS PostgreSQL

  • Versi utama: RDS PostgreSQL 17

  • Versi kernel minor: 20260330

  • Tipe instans: pg.x4.2xlarge.1

Tool pengujian

ann-benchmarks

Set data pengujian

dbpedia-openai-1000k-angular

Parameter pengujian

  • ivfflat.lists = 1000

  • ivfflat.nprobes ditingkatkan secara bertahap: [1, 2, 4, 8, 16, 32, 50, 100]

Perbandingan pembuatan indeks

Tabel berikut membandingkan waktu pembuatan dan ukuran indeks antara indeks ivf-RabitQ dan indeks ivfflat pgvector native, yang dibuat menggunakan set data dan parameter yang sama.

Jenis indeks

Waktu pembuatan

Ukuran indeks

ivfflat (native)

95,32 detik

7820 MB

ivf-RabitQ

78,72 detik

248 MB

Hasil menunjukkan bahwa dibandingkan dengan indeks ivfflat pgvector native, indeks ivf-RabitQ mengurangi ukuran indeks dari 7.820 MB menjadi 248 MB, mencapai rasio kompresi lebih dari 31x. Pembuatan indeks juga lebih cepat.

Perbandingan performa kueri

Dibandingkan dengan indeks ivfflat pgvector native, indeks RabitQ dapat mencapai peningkatan performa pencarian beberapa kali lipat dengan kerugian recall kurang dari 1%. Hasil pengujian lengkapnya adalah sebagai berikut:

Parameter

Ivfflat QPS

Ivf-RabitQ QPS

Rasio percepatan

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%

Gambar berikut menunjukkan kurva QPS-recall, membandingkan beberapa jenis indeks:

  • pgvector: Indeks HNSW native dari versi komunitas.

  • pgvector_ivfflat: Indeks ivfflat native dari versi komunitas.

  • pgvector_ivfrabitq: Indeks ivf-RabitQ.

  • pgvector_hnsw_rabitq: Indeks HNSW-RabitQ, yang mencakup langkah rerank.

  • pgvector_hnsw_rabitq_without_refine: Indeks HNSW-RabitQ yang menggunakan jarak terkuantisasi secara langsung, menghilangkan langkah rerank demi performa kueri yang lebih tinggi.

image.png