회사에서 새로운 기능 개발 단계에서 도입할 DB를 고려하던 도중 Milvus라는 벡터 DB에 대해 정리하게되었다.
7월중에 정리한 내용이지만 생각난김에 지금(2024/08/17)이라도 기록으로 남겨둔다.
https://discuss.pytorch.kr/t/2023-picking-a-vector-database-a-comparison-and-guide-for-2023/2625
해당 주소에서 벡터DB를 비교한 자료를 근거로 Milvus을 선택하여 정리해보았다.
Milvus 도커 컴포즈 파일을 아래의 경로에서 설치해준다
https://github.com/milvus-io/milvus/releases
다운받은 컴포즈 파일을 이용하여 컨테이너를 올려준다.
docker compose up -d
도커 컴포즈 실행여부를 확인한다
docker compose ps
Python version≥3.7
pip3 install protobuf==3.20.0
pip3 install grpcio-tools
python3 -m pip install pymilvus==2.4.4
wget https://raw.githubusercontent.com/milvus-io/pymilvus/master/examples/hello_milvus.py
샘플 코드로 설치된 예제를 보며 코드를 설명하겠다.
먼저 Milvus와 연결을 해준다. pymilvus
의 connection
메서드를 사용하여 연결을 설정한다.
hello_milvus라는 컬렉션의 존재여부를 확인한다.
Milvus
에서의 Collection
은 RDBMS
의 Table
과 유사한 개념이다.Collection
또한 스키마의 설계가 필요하다FieldSchema
라는 메서드를 이용한다. FieldSchema
에 필요한 매개변수는 다음과 같다.name
: 필드명dtype
: 필드 변수 타입is_primary
: PK 여부auto_id
: 자동 생성 여부max_length
: 길이 제한 설정dim
: 벡터 필드의 차원 설정FieldSchema
배열을 사용하여 스키마를 만들어주고, 만들어진 스키마를 사용하여 Collection
을 생성한다.Collection
에 삽입할 데이터를 만들 수 있다.search_params
metric_type
: L2
norm을 기준으로 검색params
: { nprobe
: 10} : 10개의 클러스터를 탐색하겠다는 의미search
다음 블로그를 참고하였다