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()