Indexing¶
AkasicDB vector 인덱스는 PostgreSQL의 CREATE INDEX ... USING vectoron 문으로 정의합니다. 이 페이지의 SQL은 AkasicDB vector 기능을 사용할 수 있는 데이터베이스에서 실행합니다.
공통 예제 테이블을 만듭니다.
CREATE TABLE items (
id bigserial PRIMARY KEY,
category_id integer NOT NULL,
embedding vector(3) NOT NULL
);
INSERT INTO items (category_id, embedding)
SELECT (i % 10), ARRAY[random(), random(), random()]::real[]
FROM generate_series(1, 100000) AS i;
Warning
Vector Index의 개수 제한과 index당 Vector 항목 수 제한은 edition/build마다 다릅니다. 사용 중인 에디션에 적용된 제한은 Operations 섹션에서 다루고 있는 SQL 함수로 확인할 수 있습니다.
Vamana 인덱스 생성¶
Vamana는 L2 distance 기반 workload에 사용하는 ANN 인덱스입니다. 세부 옵션과 query-time tuning은 Vamana에서 다룹니다.
Note
Vamana 예제는 vector_l2_ops와 <->를 사용합니다.
CREATE INDEX items_embedding_vamana_idx
ON items
USING vectoron (embedding vector_l2_ops)
WITH (options = $$
[indexing.vamana]
alpha = 1.2
r = 32
l_search = 64
phase = 1
$$);
Segment 및 Optimization 옵션¶
아래 옵션은 index type과 별개로 segment 처리와 background optimization을 조정합니다.
CREATE INDEX items_embedding_vamana_tuned_idx
ON items
USING vectoron (embedding vector_l2_ops)
WITH (options = $$
[indexing.vamana]
alpha = 1.2
r = 32
l_search = 64
phase = 1
[segment]
max_growing_segment_size = 200000
max_sealed_segment_size = 1000000
[optimizing]
delete_threshold = 0.1
optimizing_secs = 1000
optimizing_threads = 8
sealing_secs = 60
sealing_size = 5000
$$);
| Option | Default | 설명 |
|---|---|---|
segment.max_growing_segment_size |
1000000 |
아직 sealed segment로 넘어가지 않은 growing segment의 최대 벡터 수입니다. |
segment.max_sealed_segment_size |
4000000000 |
sealed segment의 최대 벡터 수입니다. |
optimizing.delete_threshold |
0.2 |
삭제 비율이 이 값을 넘는 segment는 병합이나 최적화 후보가 될 수 있습니다. |
optimizing.optimizing_secs |
600 |
최적화 시도 사이의 최소 대기 시간입니다. |
optimizing.optimizing_threads |
4 |
background merge와 optimization에 사용하는 worker 수입니다. 값을 늘리면 병렬 background 작업 수와 CPU 사용량이 증가합니다. |
optimizing.sealing_secs |
60 |
임계값 도달 뒤 segment sealing까지 기다리는 시간입니다. |
optimizing.sealing_size |
5000 |
write buffer를 growing segment로 넘기는 벡터 수 임계값입니다. |
다른 인덱스¶
Other Vector Indexes는 HNSW, IVF, Flat, Sparse Inverted Index의 생성 문법과 주요 옵션을 다룹니다.