Skip to content

Latest commit

 

History

History
63 lines (36 loc) · 3.37 KB

20240425_01.md

File metadata and controls

63 lines (36 loc) · 3.37 KB

DB吐槽大会,第88期 - PG向量索引的几个问题

作者

digoal

日期

2024-04-25

标签

PostgreSQL , PolarDB , DuckDB , pgvector , 向量 , 索引结构 , hnsw , ivfflat , gin , gin_fast_update


背景

视频回放

PG 可以通过向量索引来提升向量检索的性能, 相关开源项目如下:

但是目前PG的向量索引还有一些待改进的地方:

  • 1、创建向量索引后, 表的DML性能会有较严重的下降. 原因是修改或写入数据时向量索引的实时build带来了较大的资源消耗和耗时.
  • 2、在保障性能的情况下, 召回率还有提升空间, 参考: 《头大! 索引扫描和全表扫描结果不一样, 这向量数据库还能用? 教你一招大幅提升召回率》
  • 3、build向量索引比普通btree索引要慢很多, 即使是pgvector支持并行创建索引后, 性能还是有较大的提升空间.
  • 4、目前仅支持hnsw, ivfflat 索引实现算法.
  • 5、目前仅仅支持: L2 distance, inner product, and cosine distance
  • 6、混合搜索性能较差, 向量索引 不能同时和其他 例如btree索引进行高效结合搜索. 虽然数据库提供了bitmap and|or的方法合并多个索引的结果, 但是IO和cpu损耗放大效果明显.

改进思路建议:

  • 1、学习gin ( 《PostgreSQL GIN索引实现原理》 ), 使用2阶段合并, 实现fast update. 降低有向量索引情况下insert/update/delete性能不佳的问题.
  • 2、算法优化, 保持性能的同时提升recall.
  • 3、提升向量索引build性能. 比如定个小目标: 1000万条记录10分钟内创建好?
  • 4、参考更多的相关论文, 支持更多的索引实现算法, 目前仅支持hnsw, ivfflat.
  • 5、支持更多的向量距离. 目前仅仅支持: L2 distance, inner product, and cosine distance
  • 6、提升混合搜索性能, 目前向量检索的索引搜索方法和其他索引搜索方法不能高效结合(例如向量索引+btree)

digoal's wechat