🚀 완전 관리형 Milvus인 Zilliz Cloud를 무료로 체험해보세요—10배 더 빠른 성능을 경험하세요! 지금 체험하기>>

milvus-logo
LFAI
  • Home
  • Blog
  • Milvus 데이터 마이그레이션 도구 소개

Milvus 데이터 마이그레이션 도구 소개

  • Engineering
March 15, 2021
Zilliz

중요 참고: Milvus 데이터 마이그레이션 도구는 더 이상 사용되지 않습니다. 다른 데이터베이스에서 Milvus로 데이터를 마이그레이션하려면 고급 Milvus 마이그레이션 도구를 사용하는 것이 좋습니다.

현재 Milvus 마이그레이션 도구가 지원됩니다:

  • Elasticsearch에서 Milvus 2.x로의 마이그레이션
  • Faiss에서 Milvus 2.x로
  • Milvus 1.x에서 Milvus 2.x로
  • Milvus 2.3.x에서 Milvus 2.3.x 이상 버전으로의 마이그레이션

Pinecone, Chroma, Qdrant 등 더 많은 벡터 데이터 소스에서 마이그레이션을 지원할 예정입니다. 계속 지켜봐 주세요.

자세한 내용은 Milvus 마이그레이션 설명서 또는 해당 GitHub 리포지토리를 참조하세요.

--------------------------------- Mivus 데이터 마이그레이션 도구는 더 이상 사용되지 않습니다 ----------------------

개요

MilvusDM (Milvus 데이터 마이그레이션)은 Milvus로 데이터 파일을 가져오고 내보내기 위해 특별히 설계된 오픈 소스 도구입니다. MilvusDM은 다음과 같은 방식으로 데이터 관리 효율성을 크게 개선하고 DevOps 비용을 절감할 수 있습니다:

  • Faiss에서 Milvus로: 압축 해제된 데이터를 Faiss에서 Milvus로 가져옵니다.

  • HDF5에서 Milvus로: HDF5 파일을 Milvus로 가져옵니다.

  • Milvus에서 Milvus로: 소스 Milvus에서 다른 대상 Milvus로 데이터를 마이그레이션합니다.

  • Milvus에서HDF5로: Milvus의 데이터를 HDF5 파일로 저장합니다.

milvusdm blog 1.png 밀버스DM 블로그 1.png

MilvusDM은 Github에서 호스팅되며 pip3 install pymilvusdm 명령줄을 실행하여 쉽게 설치할 수 있습니다. MilvusDM을 사용하면 특정 컬렉션 또는 파티션의 데이터를 마이그레이션할 수 있습니다. 다음 섹션에서는 각 데이터 마이그레이션 유형을 사용하는 방법을 설명합니다.


Faiss에서 Milvus로

단계

1. F2M.yaml을 다운로드합니다:

$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/F2

2.다음 매개변수를 설정합니다:

  • data_path: Faiss의 데이터 경로(벡터 및 해당 ID).

  • dest_host: 밀버스 서버 주소.

  • dest_port: 밀버스 서버 포트.

  • mode: 다음 모드를 사용하여 Milvus로 데이터를 가져올 수 있습니다:

    • 건너뛰기: 컬렉션 또는 파티션이 이미 있는 경우 데이터를 무시합니다.

    • 추가: 추가: 컬렉션 또는 파티션이 이미 존재하는 경우 데이터를 추가합니다.

    • 덮어쓰기: 덮어쓰기: 컬렉션 또는 파티션이 이미 있는 경우 삽입 전에 데이터를 삭제합니다.

  • dest_collection_name: 데이터 가져오기를 위한 수신 컬렉션의 이름입니다.

  • dest_partition_name: 데이터 가져오기를 위한 수신 파티션의 이름입니다.

  • collection_parameter: 벡터 차원, 인덱스 파일 크기, 거리 메트릭과 같은 컬렉션별 정보입니다.

F2M:
  milvus_version: 1.0.0
  data_path: '/home/data/faiss.index'
  dest_host: '127.0.0.1'
  dest_port: 19530
  mode: 'append'        # 'skip/append/overwrite'
  dest_collection_name: 'test'
  dest_partition_name: ''
  collection_parameter:
    dimension: 256
    index_file_size: 1024
    metric_type: 'L2'

3. F2M.yaml을 실행합니다 :

$ milvusdm --yaml F2M.yaml

샘플 코드

1. Faiss 파일을 읽어 벡터와 해당 ID를 검색합니다.

ids, vectors = faiss_data.read_faiss_data()

2. 검색된 데이터를 Milvus에 삽입합니다:

insert_milvus.insert_data(vectors, self.dest_collection_name, self.collection_parameter, self.mode, ids, self.dest_partition_name)


HDF5에서 Milvus로

단계

1. H2M.yaml을 다운로드합니다.

$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/H2M.yaml

2.다음 매개변수를 설정합니다:

  • data_path: HDF5 파일 경로.

  • data_dir: HDF5 파일이 있는 디렉토리.

  • dest_host: 밀버스 서버 주소.

  • dest_port: Milvus 서버 포트.

  • mode: 다음 모드를 사용하여 Milvus로 데이터를 가져올 수 있습니다:

    • 건너뛰기: 컬렉션 또는 파티션이 이미 있는 경우 데이터를 무시합니다.

    • 추가: 추가: 컬렉션 또는 파티션이 이미 존재하는 경우 데이터를 추가합니다.

    • 덮어쓰기: 덮어쓰기: 컬렉션 또는 파티션이 이미 있는 경우 삽입 전에 데이터를 삭제합니다.

  • dest_collection_name: 데이터 가져오기를 위한 수신 컬렉션의 이름입니다.

  • dest_partition_name: 데이터 가져오기를 위한 수신 파티션의 이름입니다.

  • collection_parameter: 벡터 차원, 인덱스 파일 크기, 거리 메트릭과 같은 컬렉션 관련 정보.

data_path 또는 data_dir 을 설정합니다. 둘 다 설정하지 마십시오. 여러 파일 경로를 지정하려면 data_path, 데이터 파일이 있는 디렉터리를 지정하려면 data_dir 을 사용합니다.

H2M:
  milvus-version: 1.0.0
  data_path:
    - /Users/zilliz/float_1.h5
    - /Users/zilliz/float_2.h5
  data_dir:
  dest_host: '127.0.0.1'
  dest_port: 19530
  mode: 'overwrite'        # 'skip/append/overwrite'
  dest_collection_name: 'test_float'
  dest_partition_name: 'partition_1'
  collection_parameter:
    dimension: 128
    index_file_size: 1024
    metric_type: 'L2'

3. H2M.yaml을 실행합니다 :

$ milvusdm --yaml H2M.yaml

샘플 코드

1. HDF5 파일을 읽어 벡터와 해당 ID를 검색합니다:

vectors, ids = self.file.read_hdf5_data()

2. 검색된 데이터를 Milvus에 삽입합니다:

ids = insert_milvus.insert_data(vectors, self.c_name, self.c_param, self.mode, ids,self.p_name)


밀버스에서 밀버스로

단계

1. M2M.yaml을 다운로드합니다.

$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/M2M.yaml

2.다음 파라미터를 설정합니다:

  • source_milvus_path: 소스 Milvus 작업 경로.

  • mysql_parameter: 소스 밀버스 MySQL 설정. MySQL을 사용하지 않는 경우, mysql_parameter를 ''로 설정합니다.

  • source_collection: 소스 Milvus의 컬렉션 및 해당 파티션의 이름입니다.

  • dest_host: Milvus 서버 주소.

  • dest_port: Milvus 서버 포트.

  • mode: 다음 모드를 사용하여 Milvus로 데이터를 가져올 수 있습니다:

    • 건너뛰기: 컬렉션 또는 파티션이 이미 있는 경우 데이터를 무시합니다.

    • 추가: 추가: 컬렉션 또는 파티션이 이미 존재하는 경우 데이터를 추가합니다.

    • 덮어쓰기: 덮어쓰기: 컬렉션 또는 파티션이 이미 존재하는 경우 데이터를 삽입하기 전에 삭제합니다.컬렉션 또는 파티션이 이미 존재하는 경우 삽입하기 전에 데이터를 삭제합니다.

M2M:
  milvus_version: 1.0.0
  source_milvus_path: '/home/user/milvus'
  mysql_parameter:
    host: '127.0.0.1'
    user: 'root'
    port: 3306
    password: '123456'
    database: 'milvus'
  source_collection:
    test:
      - 'partition_1'
      - 'partition_2'
  dest_host: '127.0.0.1'
  dest_port: 19530
  mode: 'skip' # 'skip/append/overwrite'

3. M2M.yaml을 실행합니다 .

$ milvusdm --yaml M2M.yaml

샘플 코드

1. 지정된 컬렉션 또는 파티션의 메타데이터에 따라 로컬 드라이브의 milvus/db에서 파일을 읽어 소스 Milvus에서 벡터와 해당 ID를 검색합니다.

collection_parameter, _ = milvus_meta.get_collection_info(collection_name)
r_vectors, r_ids, r_rows = milvusdb.read_milvus_file(self.milvus_meta, collection_name, partition_tag)

2. 검색된 데이터를 대상 Milvus에 삽입합니다.

milvus_insert.insert_data(r_vectors, collection_name, collection_parameter, self.mode, r_ids, partition_tag)


Milvus에서 HDF5로

단계

1. M2H.yaml을 다운로드합니다:

$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/M2H.yaml

2.다음 파라미터를 설정합니다:

  • source_milvus_path: 소스 Milvus 작업 경로.

  • mysql_parameter: 소스 Milvus MySQL 설정. MySQL을 사용하지 않는 경우, mysql_parameter를 ''로 설정합니다.

  • source_collection: 소스 Milvus의 컬렉션 및 해당 파티션의 이름입니다.

  • data_dir: 저장된 HDF5 파일을 보관할 디렉터리입니다.

M2H:
  milvus_version: 1.0.0
  source_milvus_path: '/home/user/milvus'
  mysql_parameter:
    host: '127.0.0.1'
    user: 'root'
    port: 3306
    password: '123456'
    database: 'milvus'
  source_collection: # specify the 'partition_1' and 'partition_2' partitions of the 'test' collection.
    test:
      - 'partition_1'
      - 'partition_2'
  data_dir: '/home/user/data'

3. M2H.yaml을 실행합니다:

$ milvusdm --yaml M2H.yaml

샘플 코드

1. 지정된 컬렉션 또는 파티션의 메타데이터에 따라 로컬 드라이브의 milvus/db에서 파일을 읽어 벡터와 해당 ID를 검색합니다.

collection_parameter, version = milvus_meta.get_collection_info(collection_name)
r_vectors, r_ids, r_rows = milvusdb.read_milvus_file(self.milvus_meta, collection_name, partition_tag)

2.검색된 데이터를 HDF5 파일로 저장합니다.

data_save.save_yaml(collection_name, partition_tag, collection_parameter, version, save_hdf5_name)

MilvusDM 파일 구조

아래 순서도는 MilvusDM이 수신한 YAML 파일에 따라 어떻게 다른 작업을 수행하는지 보여줍니다:

milvusdm blog 2.png milvusdm 블로그 2.png

MilvusDM 파일 구조:

  • pymilvusdm

    • core

      • 밀버스_클라이언트.py: 밀버스에서 클라이언트 작업을 수행합니다.

      • read_data.py: 로컬 드라이브에 있는 HDF5 데이터 파일을 읽습니다. (다른 형식의 데이터 파일 읽기를 지원하려면 여기에 코드를 추가하세요.)

      • read_faiss_data.py: Faiss의 데이터 파일을 읽습니다.

      • read_milvus_data.py: 밀버스 형식의 데이터 파일을 읽습니다.

      • read_milvus_meta.py: 밀버스에서 메타데이터를 읽습니다.

      • data_to_milvus.py: YAML 파일의 파라미터를 기반으로 컬렉션 또는 파티션을 생성하고 해당 벡터와 벡터 ID를 Milvus로 가져옵니다.

      • save_data.py: 데이터를 HDF5 파일로 저장합니다.

      • write_logs.py: 런타임 중에 로그를 씁니다.

    • faiss_to_milvus.py: Faiss에서 Milvus로 데이터를 가져옵니다.

    • hdf5_to_milvus.py: HDF5 파일에 있는 데이터를 Milvus로 가져옵니다.

    • milvus_to_milvus.py: 소스 밀버스에서 대상 밀버스로 데이터를 마이그레이션합니다.

    • milvus_to_hdf5.py: Milvus의 데이터를 내보내고 HDF5 파일로 저장합니다.

    • main.py: 수신한 YAML 파일에 따라 해당 작업을 수행합니다.

    • setting.py: MilvusDM 코드 실행과 관련된 설정.

  • setup.py: pymilvusdm 파일 패키지를 생성하고 PyPI(Python 패키지 인덱스)에 업로드합니다.


요약

MilvusDM은 주로 Milvus 안팎으로 데이터를 마이그레이션하는 작업을 처리하며, 여기에는 Faiss에서 Milvus로, HDF5에서 Milvus로, Milvus에서 Milvus로, Milvus에서 HDF5로 마이그레이션하는 작업이 포함됩니다.

다음 기능은 향후 릴리스에 추가될 예정입니다:

  • Faiss에서 Milvus로 바이너리 데이터 가져오기.

  • 소스 Milvus와 대상 Milvus 간의 데이터 마이그레이션을 위한 차단 목록 및 허용 목록.

  • 소스 Milvus의 여러 컬렉션 또는 파티션에서 데이터를 대상 Milvus의 새 컬렉션으로 병합 및 가져오기.

  • Milvus 데이터의 백업 및 복구.

MilvusDM 프로젝트는 Github에서 오픈 소스입니다. 프로젝트에 대한 모든 기여를 환영합니다. 별점 🌟을 주고 이슈를 제기하거나 직접 코드를 제출해 주세요!

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    계속 읽기