内容提要
pgvector 0.7.0版本引入了float16向量、稀疏向量和位向量,显著减少内存占用并提升性能。使用float16向量可将内存需求减半,HNSW索引构建速度提高30%。稀疏向量和位向量进一步节省存储空间,支持新的距离函数。整体性能较去年提升超过100倍。
延伸解读
float16 向量的内存与性能权衡
pgvector 0.7.0 引入 float16 向量,可将内存需求减半。使用 halfvec 类型时,索引和表均可采用 float16,磁盘空间减少 50%,共享内存需求也减半,从而减少页面驱逐,提升并发性能。HNSW 索引构建速度在并行模式下提高 30%,但单线程构建因 ARM 架构上 float16 与 float32 算术相同而未见提升。实际测试中,900K 个 OpenAI 1536 维向量表大小从 7GB 降至 3.5GB。
稀疏向量与位向量的适用场景
稀疏向量适用于高维但多数分量为零的数据,仅存储非零分量,大幅节省空间。位向量通过二值量化将浮点向量转为二进制,进一步压缩存储,常用于快速预筛选:先用位向量 HNSW 索引选出候选子集,再对子集进行精确搜索。这种方法可构建小且快的索引,适合插入、更新频繁的场景。但子查询大小和最终结果数需根据数据实验调整。
新增距离函数与索引支持
0.7.0 新增 L1 距离操作符 <+>,并支持三种距离类型的索引:L1 距离(vector_l1_ops)、汉明距离(bit_hamming_ops)和杰卡德距离(bit_jaccard_ops)。这些距离函数扩展了向量搜索的灵活性,尤其适合位向量和稀疏向量的相似性度量。用户可根据数据特性选择合适的距离函数和索引类型,以优化查询性能。
性能提升与升级建议
相比一年前,pgvector 整体性能提升超过 100 倍,主要得益于 HNSW 索引、并行构建以及 float16、稀疏和位向量等特性。在 Supabase 上,新项目默认使用 v0.7.0 或更高版本,旧项目可通过升级 Postgres 版本至 15.1.1.47 或更高来获得这些改进。升级前需确认扩展版本,并启用 vector 扩展。
Q&A
pgvector 0.7.0版本有哪些新特性?
pgvector 0.7.0版本引入了float16向量、稀疏向量和位向量,显著减少内存占用并提升性能。
使用float16向量有什么优势?
使用float16向量可将内存需求减半,并提高HNSW索引构建速度30%。
稀疏向量和位向量的作用是什么?
稀疏向量和位向量可以进一步节省存储空间,并支持新的距离函数。
pgvector 0.7.0的整体性能提升了多少?
整体性能较去年提升超过100倍。
如何将现有的float32嵌入表复制到float16?
可以使用创建新表和插入数据的SQL语句,将float32嵌入表复制到float16。
pgvector 0.7.0支持哪些新的距离函数?
pgvector 0.7.0支持L1距离、汉明距离和杰卡德距离等新的距离函数。