pgvecto.rs는 벡터 유사성 검색 기능을 제공하는 Postgres 확장입니다. Rust로 작성되었으며 pgrx를 기반으로 합니다.
자세한 내용은 pgvecto.rs와 pgVector를 확인하세요.
특징 | pgvecto.rs | pg벡터 |
---|---|---|
필터링 | 벡터 검색 및 관계형 쿼리(예: 단일 벡터 TopK + 필터 + 조인)를 위한 VBASE 방법을 도입합니다. | 필터를 적용하면 결과가 불완전할 수 있습니다. 예를 들어 원래 결과를 10개로 제한하려고 했다면 필터를 사용하면 결과가 5개만 나올 수도 있습니다. |
벡터 차원 | 최대 65535 차원을 지원합니다. | 최대 2000개의 측정기준을 지원합니다. |
심드 | SIMD 명령은 특정 시스템의 기능을 기반으로 성능을 최대화하기 위해 런타임에 동적으로 전달됩니다. | 0.7.0에서 Linux x86-64"의 거리 기능을 위한 CPU 디스패칭을 추가했습니다. |
데이터 유형 | 추가 데이터 유형인 이진 벡터, FP16(16비트 부동 소수점) 및 INT8(8비트 정수)을 도입합니다. | - |
인덱싱 | PostgreSQL과 별도로 인덱스의 저장 및 메모리를 처리합니다. | PostgreSQL의 기본 스토리지 엔진에 의존합니다. |
월마트 지원 | 데이터에 대한 WAL(Write-Ahead Logging) 지원을 제공하며 인덱스 지원이 진행 중입니다. | 인덱스 및 데이터에 대한 WAL(Write-Ahead Logging) 지원을 제공합니다. |
신규 사용자의 경우 Docker 이미지를 사용하여 빠르게 시작하는 것이 좋습니다.
docker run
--name pgvecto-rs-demo
-e POSTGRES_PASSWORD=mysecretpassword
-p 5432:5432
-d tensorchord/pgvecto-rs:pg16-v0.2.1
그런 다음 psql
명령줄 도구를 사용하여 데이터베이스에 연결할 수 있습니다. 기본 사용자 이름은 postgres
이고 기본 비밀번호는 mysecretpassword
입니다.
psql -h localhost -p 5432 -U postgres
다음 SQL을 실행하여 확장이 활성화되었는지 확인하세요.
DROP EXTENSION IF EXISTS vectors;
CREATE EXTENSION vectors;
pgvecto.rs는 n차원 벡터를 나타내는 새로운 데이터 유형 vector(n)
도입합니다. 괄호 안의 n
은 벡터의 차원을 나타냅니다.
다음 SQL을 사용하여 테이블을 생성할 수 있습니다.
-- create table with a vector column
CREATE TABLE items (
id bigserial PRIMARY KEY ,
embedding vector( 3 ) NOT NULL -- 3 dimensions
);
팁
vector(n)
은 다음 경우에만 유효한 데이터 유형입니다. vector(3)
유형의 값을 생성하는 것이 가능합니다. vector
도 유효한 데이터 유형입니다. 그러나 아직 넣을 수는 없습니다. vector
사용하거나 열이 나타내는 차원과 일부 값이 일치하지 않는 경우 해당 열에 대한 인덱스를 생성할 수 없습니다.
그런 다음 다음과 같이 테이블을 벡터 데이터로 채울 수 있습니다.
-- insert values
INSERT INTO items (embedding)
VALUES ( ' [1,2,3] ' ), ( ' [4,5,6] ' );
-- or insert values using a casting from array to vector
INSERT INTO items (embedding)
VALUES (ARRAY[ 1 , 2 , 3 ]:: real []), (ARRAY[ 4 , 5 , 6 ]:: real []);
우리는 두 벡터 사이의 거리를 계산하기 위해 세 가지 연산자를 지원합니다.
<->
: 유클리드 거리의 제곱으로, 다음과 같이 정의됩니다. <#>
: 음의 내적, 다음과 같이 정의됨 <=>
: 코사인 거리, 다음과 같이 정의됨 -- call the distance function through operators
-- squared Euclidean distance
SELECT ' [1, 2, 3] ' ::vector < - > ' [3, 2, 1] ' ::vector;
-- negative dot product
SELECT ' [1, 2, 3] ' ::vector < # > '[3, 2, 1]'::vector;
-- cosine distance
SELECT ' [1, 2, 3] ' ::vector <=> ' [3, 2, 1] ' ::vector;
이렇게 간단하게 벡터를 검색할 수 있습니다.
-- query the similar embeddings
SELECT * FROM items ORDER BY embedding < - > ' [3,2,1] ' LIMIT 5 ;
질문 답변 애플리케이션 튜토리얼을 확인해 보세요.
vecf16
유형은 스칼라 유형을 제외하고 vector
와 동일합니다. 16비트 부동 소수점 숫자를 저장합니다. 더 나은 성능을 얻기 위해 메모리 사용량을 줄이려면 vector
유형을 vecf16
유형으로 바꾸십시오.
로드맵을 확인해 보세요. 뛰어들고 싶나요? 토론과 기여를 환영합니다!
good first issue ?
문제! 우리는 오픈 소스 커뮤니티, 개인, 파트너의 모든 종류의 기여를 환영합니다.
다음 멋진 분들에게 감사드립니다(이모지 키):
기여도를 추가하세요 |
이 프로젝트는 모든 기여자 사양을 따릅니다. 어떤 종류의 기여도 환영합니다!
다음 프로젝트에 감사드립니다: