Pg_vectorsearch - pgvector의 IVFFlat과 HNSW보다 빠른 인덱스

4 hours ago 3

pg_vectorsearch는 PostgreSQL에서 고성능 근사 최근접 이웃(ANN) 검색을 제공하는 확장으로, C로 구현한 PRISM 인덱스를 사용함 PRISM은 pgvector의 IVFFlat과 HNSW보다 검색과 인덱스 구축이 빠르며, 1억 벡터 데이터셋에서는 메모리가 4분의 1인 인스턴스에서도 동일 재현율 기준으로 HNSW보다 빠른 성능을 보임 계층형 중심점 트리로 검색할 클러스터를 찾고, RaBitQ 양자화의 오차 한계로 후보를 걸러 원본 정밀도 벡터의 재순위화 작업을 줄임 기존 pgvector의 vector와 halfvec 컬럼에 테이블이나 쿼리를 바꾸지 않고 인덱스를 구축할 수 있으며, 독자적인 vec32와 vec16 타입도 제공함 현재 알파 버전으로 테스트용이며 프로덕션용이 아님. 사전 릴리스 사이의 업그레이드가 불가능할 수 있어 확장과 인덱스를 삭제한 뒤 다시 생성할 계획이 필요함 PRISM의 구조와 성능 PRISM(Partitioned Routing Index for Similarity Matching) 은 PostgreSQL 네이티브 인덱스 접근 방식으로, 개념적으로 pgvector의 IVFFlat과 유사하지만 양자화, 라우팅, 파티셔닝 기법을 중심으로 설계됨 C로 구현해 PostgreSQL과 통합하며, 1억 개 이상의 벡터를 대상으로 하는 IVF 계열 인덱스임 성능 발표에 따르면 검색과 인덱스 구축 모두 pgvector의 IVFFlat과 HNSW보다 크게 빠름 1억 벡터 데이터셋에서는 메모리 4분의 1인 인스턴스에서도 동일 재현율 기준으로 그래프 기반 HNSW보다 빠름 검색 처리 방식 계층형 중심점 트리가 벡터를 클러스터로 나누며, PostgreSQL 버퍼 캐시를 활용해 트리를 메모리에 유지함 벡터는 RaBitQ 로 양자화한 뒤 SIMD 거리 계산에 최적화된 페이지 구조의 포스팅 리스트에 저장함 거리 계산은 AVX2, AVX512, NEON에 최적화됨 RaBitQ 인코딩의 이론적 오차 한계로 최근접 이웃이 될 수 없는 벡터를 제외해, 테이블에 저장된 원본 정밀도 벡터를 다시 평가하는 횟수를 줄임 쿼리 처리는 다음 순서로 진행됨 버퍼 캐시의 중심점 트리를 탐색해 가까운 클러스터를 찾음 버퍼 캐시와 비동기 I/O로 포스팅 리스트를 스캔해 후보를 수집함 RaBitQ의 2단계 필터링에서 추정값과 오차 한계를 이용해 재순위화할 후보를 추림 힙에서 원본 정밀도 벡터를 읽어 재순위화함 최근접 이웃 k...

Read Entire Article