Milvus의 Collection 클래스는 MySQL의 테이블과 유사하며, 데이터를 구성하고 하나 이상의 파티션으로 구성됩니다.

Collection 생성

Collection은 하나 이상의 파티션으로 구성됩니다. 새 Collection을 생성할 때 Milvus는 _default라는 기본 파티션을 생성합니다. 더 많은 정보는 Collection과 관련된 용어 설명을 참조하시기 바랍니다.

다음 예제는 book_id라는 기본 키 필드, word_count라는 INT64 스칼라 필드, 그리고 book_intro라는 2차원 부동 소수점 벡터 필드를 포함한 두 개의 파티션을 가진 book이라는 Collection을 생성합니다. 실제 응용 프로그램에서는 이 예제보다 더 높은 차원의 벡터를 사용하는 경우가 많습니다.

준비 모드

이 모드는 MYSQL 테이블의 구조를 정의하는 것과 유사합니다.

생성할 컬렉션은 기본 키 필드와 벡터 필드를 포함해야 합니다. 기본 키 필드는 INT64 및 VarChar 데이터 유형을 지원합니다.

먼저 필드 스키마, 컬렉션 스키마 및 컬렉션 이름을 포함한 필요한 매개변수를 준비하세요.

컬렉션 스키마를 정의하기 전에 컬렉션의 각 필드에 대한 스키마를 생성하세요. Milvus는 (기본 키 필드 제외) 각 스칼라 필드에 대해 데이터 삽입의 복잡성을 줄이기 위해 기본값을 지정할 수 있습니다. 이는 데이터를 삽입할 때 필드를 비워둔 경우에는 필드 스키마 작성 중에 구성된 기본값이 사용됩니다.

from pymilvus import CollectionSchema, FieldSchema, DataType
book_id = FieldSchema(
  name="book_id",
  dtype=DataType.INT64,
  is_primary=True,
)
book_name = FieldSchema(
  name="book_name",
  dtype=DataType.VARCHAR,
  max_length=200,
  default_value="알 수 없음"  # 기본값은 "알 수 없음"
)
word_count = FieldSchema(
  name="word_count",
  dtype=DataType.INT64,
  default_value=9999  # 기본값은 9999
)
book_intro = FieldSchema(
  name="book_intro",
  dtype=DataType.FLOAT_VECTOR,
  dim=2
)
schema = CollectionSchema(
  fields=[book_id, book_name, word_count, book_intro],
  description="도서 검색을 위한 테스트",  # 설명: "도서 검색을 위한 테스트"
  enable_dynamic_field=True  # 동적 스키마 활성화
)
collection_name = "book"
스키마 타입 매개변수 설명 옵션
FieldSchema name 생성할 필드의 이름 N/A
dtype 생성할 필드의 데이터 유형 기본 키 필드: - DataType.INT64 (numpy.int64) - DataType.VARCHAR (VARCHAR) 스칼라 필드: - DataType.BOOL (Boolean) - DataType.INT8 (numpy.int8) - DataType.INT16 (numpy.int16) - DataType.INT32 (numpy.int32) - DataType.INT64 (numpy.int64) - DataType.FLOAT (numpy.float32) - DataType.DOUBLE (numpy.double) - DataType.VARCHAR (VARCHAR) - DataType.JSON (JSON) 벡터 필드: - BINARY_VECTOR (바이너리 벡터) - FLOAT_VECTOR (플로트 벡터)
is_primary 필드가 기본 키 필드인지를 제어하는 스위치. 이 매개변수는 기본 키 필드에 대해 지정해야 합니다. True 또는 False
auto_id 자동 ID (기본 키) 할당을 활성화 또는 비활성화하는 스위치. 이 매개변수는 기본 키 필드에 대해 지정해야 하며 기본값은 False입니다. True 또는 False
max_length (VARCHAR 필드에 필요) 삽입할 수 있는 문자열의 최대 길이 [1, 65,535]
default_value 필드의 기본값. 이 매개변수는 배열 및 JSON 스칼라 필드에만 적용됩니다. 기본 키 필드에 대해 기본값을 지정할 수 없습니다. 자세한 내용은 default_value 매개변수를 참조하세요. N/A
dim (벡터 필드에 필요) 벡터의 차원 [1, 32,768]
description (옵션) 필드에 대한 설명 N/A
CollectionSchema fields 컬렉션을 위해 생성할 필드 N/A
description (옵션) 생성할 컬렉션에 대한 설명 N/A
enable_dynamic_field 동적 스키마를 활성화할지 여부. 데이터 유형: 부울 (true 또는 false). 옵션, 기본값은 False입니다. 동적 스키마에 대한 자세한 내용은 동적 스키마 및 컬렉션 관리 사용 설명서를 참조하세요.
collection_name 생성할 컬렉션의 이름 N/A

스키마로 컬렉션 생성하기

이제 지정된 스키마로 컬렉션을 생성하세요.

from pymilvus import Collection
collection = Collection(
    name=collection_name,
    schema=schema,
    using='default',
    shards_num=2
    )
매개변수 설명 옵션
using (선택사항) 여기에 서버의 별명을 지정하고 Milvus 서버에 컬렉션을 생성할 위치를 선택합니다. 없음
shards_num (선택사항) 생성할 컬렉션의 샤드 수 [1,16]
num_partitions (선택사항) 생성할 컬렉션의 논리적 파티션 수 [1,4096]
*kwargs: collection.ttl.seconds (선택사항) 컬렉션의 TTL은 컬렉션의 만료 시간입니다. 만료된 컬렉션의 데이터는 정리되고 검색이나 쿼리에 참여하지 않습니다. TTL을 초 단위로 지정합니다. 값은 0 이상이어야 합니다. 0은 TTL을 비활성화합니다.

제한사항

리소스 구성

기능 최대 제한
컬렉션 이름 길이 255 문자
컬렉션 내 파티션 수 4,096
컬렉션 내 필드 수 64
컬렉션 내 샤드 수 16

default_value 매개변수

  • default_value는 배열이 아닌 JSON 스칼라 필드에만 적용됩니다.
  • default_value는 기본 키에는 적용되지 않습니다.
  • default_value의 데이터 유형은 dtype에서 지정된 데이터 유형과 동일해야 합니다. 그렇지 않으면 오류가 발생할 수 있습니다.
  • auto_id를 사용하는 경우 나머지 모든 필드를 기본값으로 설정하는 것은 허용되지 않습니다. 다시 말해, insert 또는 update 작업을 수행할 때 적어도 하나의 필드 값을 지정해야 합니다. 그렇지 않으면 오류가 발생할 수 있습니다.

컬렉션 이름 변경

컬렉션 이름을 변경하려면 컬렉션 이름 변경 API를 사용하여 Milvus와 상호 작용할 수 있습니다. 이 가이드는 기존 컬렉션의 이름을 변경하는 방법을 이해하는 데 도움이 될 것입니다.

다음 코드 스니펫에서 우리는 컬렉션을 생성하고 old_collection이라는 이름으로 지정한 후, 이를 new_collection로 바꿉니다.

from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility
connections.connect(alias="default")
schema = CollectionSchema(fields=[
...     FieldSchema("int64", DataType.INT64, description="int64", is_primary=True),
...     FieldSchema("float_vector", DataType.FLOAT_VECTOR, is_primary=False, dim=128),
... ])
collection = Collection(name="old_collection", schema=schema)
utility.rename_collection("old_collection", "new_collection") # 출력: True
utility.has_collection("new_collection") # 출력: False

컬렉션 수정하기

현재 TTL 기능은 Python에서만 사용할 수 있습니다.

collection.set_properties(properties={"collection.ttl.seconds": 1800})

위 예제는 컬렉션의 TTL을 1800초로 변경합니다.

컬렉션이 존재하는지 확인하기

Milvus에 컬렉션이 있는지 확인하세요.

from pymilvus import utility
utility.has_collection("book")

컬렉션 세부 정보 확인하기

from pymilvus import Collection
collection = Collection("book")  # 기존 컬렉션을 가져옵니다.

collection.schema                # 컬렉션의 CollectionSchema를 반환합니다.
collection.description           # 컬렉션의 설명을 반환합니다.
collection.name                  # 컬렉션의 이름을 반환합니다.
collection.is_empty              # 컬렉션이 비어 있는지 여부를 나타내는 부울 값을 반환합니다.
collection.num_entities          # 컬렉션의 엔터티 수를 반환합니다.
collection.primary_field         # 기본 키 필드의 schema.FieldSchema를 반환합니다.
collection.partitions            # [Partition] 객체의 목록을 반환합니다.
collection.indexes               # [Index] 객체의 목록을 반환합니다.
collection.properties            # 컬렉션의 데이터 만료 시간을 반환합니다.

모든 컬렉션 나열하기

from pymilvus import utility
utility.list_collections()

컬렉션 삭제하기

from pymilvus import utility
utility.drop_collection("book")

컬렉션 별칭 생성하기

from pymilvus import utility
utility.create_alias(
  collection_name = "book",
  alias = "publication"
)

컬렉션 별칭 삭제하기

from pymilvus import utility
utility.drop_alias(alias = "publication")

컬렉션 별칭 수정

기존의 별칭을 다른 컬렉션을 가리키도록 수정합니다. 다음 예시는 publication이라는 별칭이 원래 다른 컬렉션을 위해 생성된 상황을 기반으로 합니다.

from pymilvus import utility
utility.alter_alias(
  collection_name = "book",
  alias = "publication"
)

컬렉션 불러오기

검색 또는 쿼리 작업을 수행하기 전에 컬렉션을 메모리로 불러오는 방법입니다. Milvus에서 모든 검색 및 쿼리 작업은 메모리에서 실행됩니다.

Milvus는 사용자가 쿼리 노드의 추가적인 CPU 및 메모리 리소스를 활용하기 위해 다중 복제본으로 컬렉션을로드할 수 있습니다. 이 기능은 추가 하드웨어 없이 전체적인 QPS 및 처리량을 개선합니다. 컬렉션을로드하기 전에 해당 컬렉션에 대해 인덱스를 생성했는지 확인하십시오.

from pymilvus import Collection, utility

collection = Collection("book")
collection.load(replica_number=2)

utility.load_state("book")

utility.loading_progress("book")

컬렉션 해제

검색 또는 쿼리 작업 후 메모리 사용량을 줄이기 위해 컬렉션을 해제하는 방법입니다.

from pymilvus import Collection
collection = Collection("book") 
collection.release()