全部產品
Search
文件中心

ApsaraDB RDS:RabitQ索引

更新時間:May 10, 2026

RDS PostgreSQL基於pgvector外掛程式提供RabitQ索引能力。RabitQ是一種高壓縮比的向量量化索引方法,相較於pgvector原生索引,可大幅降低索引儲存空間,並顯著提升向量搜尋吞吐,同時保持較高的召回精度。本文介紹RabitQ索引的基本原理、使用方式以及與pgvector原生索引的效能測試對比。

背景

RabitQ是一種先進的向量量化方法,其核心理論包括以下三方面:

  • 高壓縮比的向量量化:把D維空間上的點投影到單位球面上,RabitQ的碼本是這個單位球面上內接立方體的所有頂點。每一維的取值都是 1/√D 或 -1/√D。這樣碼本上的每一條向量都可以用一個D-bit的串來表示,相較於原生pgvector使用float32數組表示每一條向量,實現了高達32倍的壓縮比。

  • 距離計算加速:通過數學推導,RabitQ下兩條向量的距離運算可以被轉換成二進位串的位元運算和popcount運算,極大增加了距離運算效率。

  • 無偏估計器:相較於其它的量化方式,RabitQ證明了估計距離和實際精確距離的理論最大誤差值。在向量搜尋時可以先根據估算距離初篩,再對少量向量計算精確距離並rerank,實現高精度的向量搜尋。

前提條件

如需啟用RabitQ索引,RDS PostgreSQL執行個體需滿足以下要求:

  • 執行個體大版本為RDS PostgreSQL 14或以上。

  • 執行個體核心小版本為20260330或以上。

  • 執行個體已安裝pgvector外掛程式,且外掛程式版本為0.8.0.2或以上。

使用方式

阿里雲在pgvector原生的ivfflat access method上拓展了RabitQ與ivf索引結合的能力。索引構建時,先進行ivf聚類,然後對每個cluster下的向量進行RabitQ量化,並保證了對存量ivfflat索引的完全向前相容。

步驟一:檢查並升級pgvector外掛程式版本

串連到目標資料庫後,執行下面的SQL查看pgvector外掛程式的版本,並在版本低於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";

步驟二:建立ivf-RabitQ索引

執行下面的SQL建立ivf-RabitQ索引:

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

其中,items為目標表名,embedding為儲存向量資料的列名,rabitq_vector_cosine_ops為餘弦相似性的RabitQ運算元。lists為ivf聚類的中心數量,建議根據資料規模選擇合適的值。

步驟三:調整搜尋參數

ivf-RabitQ在原有ivfflat的索引構建參數和查詢參數基礎上,引入了下表所列的搜尋參數。您可以通過SET命令在會話層級調整這些參數。

參數名

預設值

取值範圍

說明

ivf_rabitq.epsilon

1.9

[0.1, 4.0]

無偏估計器裡計算誤差的係數。設定越大,召回率越高。

ivf_rabitq.topk

10

[1, 32768]

rerank階段,調整計算精確距離的向量數量。建議設定等於向量召回的數量。

ivf_rabitq.max_rerank_scan_tuples

5000

[1, INT_MAX]

rerank階段,調整重排序的向量數量。

效能測試

測試環境

測試項

說明

RDS PostgreSQL執行個體

  • 大版本:RDS PostgreSQL 17

  • 核心小版本:20260330

  • 規格:pg.x4.2xlarge.1

測試載入器

ann-benchmarks

測試資料集

dbpedia-openai-1000k-angular

測試參數

  • ivfflat.lists = 1000

  • ivfflat.nprobes 梯度增加:[1, 2, 4, 8, 16, 32, 50, 100]

索引構建對比

在相同資料集和構建參數下,對比ivf-RabitQ與pgvector原生ivfflat索引的構建時間和佔用空間:

索引類型

建立時間

索引空間

ivfflat(原生)

95.32s

7820MB

ivf-RabitQ

78.72s

248MB

從結果可以看出,相比pgvector原生ivfflat索引,ivf-RabitQ將索引空間從7820MB降至248MB,壓縮比約31倍,同時索引構建時間也有所降低。

查詢效能對比

相比pgvector原生的ivfflat索引,RabitQ可以在1%以內的召回精度損失下,獲得成倍的搜尋效能提升。詳細測試結果如下:

參數設定

ivfflat QPS

ivf-RabitQ QPS

加速比

ivfflat 召回率

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%

QPS-Recall曲線如下圖所示,包含多種索引類型的對比測試結果:

  • pgvector:社區原生hnsw索引。

  • pgvector_ivfflat:社區原生ivfflat索引。

  • pgvector_ivfrabitq:ivf-RabitQ索引。

  • pgvector_hnsw_rabitq:hnsw-RabitQ索引,引入重排序。

  • pgvector_hnsw_rabitq_without_refine:直接使用量化距離,以換取更高的查詢效能。

image.png