Milvus와 MindsDB 통합
MindsDB는 AI 애플리케이션과 다양한 엔터프라이즈 데이터 소스를 통합하기 위한 강력한 도구입니다. 이는 정형 데이터와 비정형 데이터 모두에 대한 쿼리에 꼼꼼하게 답변하면서 데이터 확산에 질서를 부여하는 연합 쿼리 엔진의 역할을 합니다. 데이터가 SaaS 애플리케이션, 데이터베이스, 데이터 웨어하우스 등 어디에 흩어져 있든, MindsDB는 표준 SQL을 사용해 모든 데이터를 연결하고 쿼리할 수 있습니다. 지식 베이스를 통한 최첨단 자율 RAG 시스템이 특징이며, 수백 개의 데이터 소스를 지원하고, 로컬 개발부터 클라우드 환경까지 유연한 배포 옵션을 제공합니다.
이 튜토리얼에서는 Milvus와 MindsDB를 통합하는 방법을 보여줌으로써, 벡터 임베딩을 관리하고 쿼리하기 위한 SQL과 유사한 작업을 통해 Milvus의 벡터 데이터베이스 기능과 함께 MindsDB의 AI 기능을 활용할 수 있도록 합니다.
이 튜토리얼은 주로 MindsDB Milvus 핸들러의 공식 문서를 참조합니다. 이 튜토리얼에서 오래된 부분을 발견하면 공식 문서를 우선적으로 따르고 이슈를 생성해 주세요.
MindsDB 설치
시작하기 전에 Docker 또는 Docker Desktop을 통해 로컬에 MindsDB를 설치합니다.
계속 진행하기 전에 MindsDB와 Milvus의 기본 개념과 작동 방식을 확실히 이해했는지 확인하세요.
인수 소개
연결을 설정하는 데 필요한 인수는 다음과 같습니다:
uri밀버스 데이터베이스의 경우, 로컬 ".db" 파일 또는 도커 또는 클라우드 서비스로 설정할 수 있는 uritoken: uri 옵션에 따라 도커 또는 클라우드 서비스를 지원하는 토큰입니다.
연결을 설정하기 위한 선택적 인수는 다음과 같습니다:
SELECT 쿼리에 사용됩니다:
search_default_limit선택 문에서 전달할 기본 제한(기본값=100)search_metric_type: 검색에 사용되는 메트릭 유형(기본값="L2")search_ignore_growing유사성 검색 중 증가하는 세그먼트를 무시할지 여부(기본값=False)search_paramssearch_metric_type(기본값={"nprobe": 10})
CREATE 쿼리에 사용됩니다:
create_auto_idID가 없는 레코드를 삽입할 때 ID 자동 생성 여부(기본값=False)create_id_max_len테이블 생성 시 ID 필드의 최대 길이(기본값=64)create_embedding_dim테이블 생성 시 임베딩 차원(기본값=8)create_dynamic_field생성된 테이블에 동적 필드 포함 여부(기본값=True)create_content_max_len콘텐츠 열의 최대 길이(기본값=200)create_content_default_value콘텐츠 열의 기본값(기본값='')create_schema_description생성된 스키마에 대한 설명(기본값='')create_alias: 생성된 스키마의 별칭(기본값='default')create_index_params: 임베딩 열에 생성된 인덱스의 매개변수 (기본값={})create_index_metric_type인덱스 생성에 사용되는 메트릭(기본값='L2')create_index_typeindex: 인덱스 유형(기본값='AUTOINDEX')
사용법
계속하기 전에 pymilvus 버전이 이 고정된 버전과 동일한지 확인하세요. 버전 호환성에 문제가 있는 경우 pymilvus 버전을 롤백하거나 이 요구 사항 파일에서 사용자 정의할 수 있습니다.
연결 만들기
이 핸들러를 사용하여 MindsDB의 Milvus 서버에 연결하려면 다음 구문을 사용할 수 있습니다:
CREATE DATABASE milvus_datasource
WITH
ENGINE = 'milvus',
PARAMETERS = {
"uri": "./milvus_local.db",
"token": "",
"create_embedding_dim": 3,
"create_auto_id": true
};
- 소규모 데이터 또는 프로토타이핑을 위해 로컬 벡터 데이터베이스만 필요한 경우, URL을 로컬 파일(예:
./milvus.db)로 설정하는 것이 가장 편리한 방법이며, 이 파일에 모든 데이터를 저장하기 위해 Milvus Lite를 자동으로 활용하기 때문입니다.- 프로덕션 환경에서 대규모 데이터와 트래픽을 처리하려면 Docker 또는 Kubernetes에 Milvus 서버를 설정할 수 있습니다. 이 설정에서는 서버 주소와 포트를
uri(예:http://localhost:19530)로 사용하세요. Milvus에서 인증 기능을 활성화하는 경우token을"<your_username>:<your_password>"으로 설정하고, 그렇지 않으면 토큰을 설정할 필요가 없습니다.- 질리즈 클라우드에서 완전 관리형 Milvus를 사용할 수도 있습니다.
uri및token을 질리즈 클라우드 인스턴스의 퍼블릭 엔드포인트와 API 키로 설정하기만 하면 됩니다.
연결 끊기
연결을 삭제하려면 다음 명령을 사용합니다.
DROP DATABASE milvus_datasource;
테이블 생성
기존 테이블에서 데이터를 삽입하려면 다음을 사용합니다. CREATE
CREATE TABLE milvus_datasource.test
(SELECT * FROM sqlitedb.test);
컬렉션 삭제
컬렉션 삭제는 지원되지 않습니다.
쿼리 및 선택
검색 벡터를 사용하여 데이터베이스를 쿼리하려면 WHERE 절에 search_vector 을 사용하면 됩니다.
주의:
LIMIT을 생략하는 경우 Milvus에서 요구하므로search_default_limit이 사용됩니다.- 메타데이터 열은 지원되지 않지만, 컬렉션에 동적 스키마가 활성화된 경우 아래 예시를 참고하여 일반 쿼리처럼 쿼리할 수 있습니다.
- 동적 필드는 표시할 수 없지만 쿼리는 가능합니다.
SELECT * from milvus_datasource.test
WHERE search_vector = '[3.0, 1.0, 2.0, 4.5]'
LIMIT 10;
search_vector 를 생략하면 기본 검색이 되며 LIMIT 또는 search_default_limit 컬렉션의 항목 수가 반환됩니다.
SELECT * from milvus_datasource.test
일반 SQL처럼 동적 필드에 WHERE 절을 사용할 수 있습니다.
SELECT * FROM milvus_datasource.createtest
WHERE category = "science";
레코드 삭제하기
SQL에서와 마찬가지로 DELETE 을 사용하여 항목을 삭제할 수 있습니다.
주의:
- Milvus는 명확하게 지정된 기본 키가 있는 엔티티 삭제만 지원합니다.
IN연산자만 사용할 수 있습니다.
DELETE FROM milvus_datasource.test
WHERE id IN (1, 2, 3);
레코드 삽입
다음과 같이 개별 행을 삽입할 수도 있습니다:
INSERT INTO milvus_test.testable (id,content,metadata,embeddings)
VALUES ("id3", 'this is a test', '{"test": "test"}', '[1.0, 8.0, 9.0]');
업데이트
Milvus API에서는 레코드 업데이트가 지원되지 않습니다. DELETE 와 INSERT
자세한 내용 및 예제는 MindsDB 공식 문서를 참조하세요.