PostgreSQL码农集散地

商用向量数据库瑟瑟发抖! PG 地表最强向量插件 VectorChord 正式支持 8bit 和 4bit 量化

商用向量数据库瑟瑟发抖! PG 地表最强向量插件 VectorChord 正式支持 8bit 和 4bit 量化

PG 地表最强向量插件 VectorChord 正式支持 8bit 和 4bit 量化 :

https://github.com/tensorchord/VectorChord/releases/tag/1.1.0

https://docs.vectorchord.ai/vectorchord/usage/quantization-types.html

在 AI 浪潮席卷全球的今天,向量数据库(Vector Database)早已成为大模型(LLM)的“外挂大脑”。然而,开发者们长期面临一个极度痛苦的权衡:要么忍受专用向量数据库带来的运维复杂性,要么忍受传统关系型数据库存储向量时那惊人的内存与成本开销。

近日,PostgreSQL 向量搜索领域的“性能怪兽” VectorChord 发布了 1.1.0 版本。这次更新不只是小修小补,而是直接祭出了大招: 正式支持 8bit 和 4bit 量化(RaBitQ-quantized vectors) 。

这意味着,PostgreSQL 在向量检索性能和存储效率上,正在完成对专用向量数据库的“降维打击”。

一、 痛点:被“浮点数”拖垮的内存与钱包

在向量检索场景中,每一个向量通常由数百甚至上千个 float32 组成。

  • 现状: 一个 1536 维的向量(如 OpenAI 的 embedding),仅一条记录就要占用约 6KB 空间。当数据量达到亿级时,内存开销将是天文数字。
  • 瓶颈: 传统的 vector 插件主要依赖浮点运算,不仅占空间,更严重的是在检索时会产生海量的内存带宽消耗,导致 QPS 触及天花板。
  • 后果: 很多企业为了省钱,不得不降低索引精度,导致 AI 回答“一本正经地胡说八道”。

二、 技术剖析:RaBitQ 量化是如何实现“既要又要”的?

VectorChord 1.1.0 引入了 rabitq8 和 rabitq4 类型,将原始的 float32 向量压缩为 uint8 甚至 uint4。

1. 存储空间的“断崖式”下降

从第一性原理来看,向量检索的本质是计算相似度,而非保留精确数值。

  • 8bit 量化(rabitq8): 存储成本仅为全精度向量(vector)的 1/4,半精度向量(halfvec)的 1/2。
  • 4bit 量化(rabitq4): 顾名思义,每维度仅占 4 位。这意味着原本需要 512GB 内存的集群,现在 64GB 就能装下同样规模的向量数据。

2. 计算密度的革命:RaBitQ 算法

RaBitQ 并非简单的截断,其基于 SIGMOD 2025 的前沿研究成果。它利用位运算(Bitwise operations)来加速距离计算。在 CPU 处理时,位运算的指令周期远少于浮点运算。这种量化方式在保持极高召回率的同时,让检索延迟实现了质的飞跃。

三、 实战:如何在 PG 里玩转量化向量?

VectorChord 的强大之处在于它将量化功能深度集成到了 SQL 语法中。

1. 定义“脱脂”向量表

你可以像定义普通字段一样定义量化向量:

-- 创建一个支持 8bit 量化的项目表,维度为 1536  
CREATETABLE items (  
id bigserial PRIMARY KEY,  
    embedding rabitq8(1536)   
);  

2. 原子级的“向量压缩”写入

不需要在应用层手写量化逻辑,直接调用内置函数即可:

-- 将 float32 向量自动压缩存储  
INSERTINTO items (embedding)   
VALUES (quantize_to_rabitq8('[1.0, 0.5, -0.2, ...]'::vector));  

-- 同时也支持从 halfvec 转换  
INSERTINTO items (embedding)   
VALUES (quantize_to_rabitq8('[1.0, 0.5, -0.2, ...]'::halfvec));  

3. 创建 RaBitQ 专用索引

量化类型配合专有的 vchordrq 索引,才是性能起飞的关键:

-- 创建 L2 距离索引,极致加速  
CREATEINDEXON items USING vchordrq (embedding rabitq8_l2_ops);  

4. 语义搜索:丝滑般的检索体验

查询时,VectorChord 会自动处理量化逻辑:

-- 查找与目标最接近的 100 条记录  
SELECTidFROM items   
ORDERBY embedding <-> quantize_to_rabitq8('[0.9, 0.9, 1.1, ...]'::vector)   
LIMIT100;  

四、 逻辑的崩塌:量化是万能灵药吗?

前提假设: 我们假设“所有向量数据都具备足够的冗余性,可以承受 4bit 的精度损失”。
条件崩塌: 如果你的向量模型维度极低(例如只有 8 维),或者业务场景要求极高精度的 Top-1 匹配,强行使用 rabitq4 会导致召回率雪崩。

引申观点: 这种极致压缩更适用于需要检索大量候选结果(Retrieve a large number of results)的初筛场景。在多级检索架构中,用 rabitq4 做初筛,再用全精度做精排,才是最高效的组合。

(也就是在全精度或半精度字段上, 创建量化表达式索引, 使用量化索引初排序, 使用原始值精排)

结语

VectorChord 1.1.0 的发布,宣告了 PostgreSQL 在 AI 时代的统治力进一步加强。它不仅抛弃了过时的 PG 13,更通过量化技术,把向量搜索的门槛从“高大上”拉到了“普惠制”。

它告诉市场:你不需要一个专门的向量数据库,你只需要一个更强大的 PostgreSQL。

那么问题来了:既然 4bit 量化已经让内存不再是瓶颈,你还要继续为昂贵的专用向量数据库缴纳“认知税”吗?