콘텐츠로 이동

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의 생성 문법과 주요 옵션을 다룹니다.