스냅샷 사용 사례Compatible with Milvus 3.0.x
이 가이드에서는 스냅샷의 일반적인 사용 사례를 확인할 수 있습니다.
데이터 백업 및 복원
스냅샷은 특정 시점의 데이터를 빠르게 캡처한 것으로, 신속한 롤백이나 테스트(수일에서 수주)에 적합합니다. 반면 백업은 독립적이고 완전한 복사본으로, 장기적인 재해 복구(수주에서 수년) 및 전체 스토리지 장애에 대한 보다 강력한 보호를 위해 별도로 저장됩니다.
다음 표에서는 스냅샷과 백업을 비교합니다.
백업 |
스냅샷 |
|
|---|---|---|
백업 생성 |
모든 데이터 파일을 복사합니다(시간이 많이 소요됨) |
메타데이터만 생성(밀리초 단위) |
복원 |
데이터를 가져오고 인덱스를 재구축합니다 |
기존 데이터 및 인덱스 파일만 복사 |
성능 |
느리고 리소스 소모가 큼 |
빠르고 가볍습니다(몇 초에서 몇 분 소요) |
시스템에 미치는 영향 |
I/O 및 CPU 사용량이 높음 |
영향 최소화 |
스냅샷 생성은 일반적으로 밀리초 정도 소요되며, 복원은 데이터 양에 따라 몇 초에서 몇 분 정도 걸립니다.
스냅샷 제한, 제약 조건 및 시스템에 미치는 영향에 대한 자세한 내용은 스냅샷을 참조하십시오.
외부 컬렉션을 사용한 데이터 처리
스냅샷은 분석 또는 검증 워크로드를 위한 안정적이고 특정 시점의 소스를 제공할 수 있습니다. Milvus 스냅샷의 경우, 스냅샷 파일을 일반 Spark 입력으로 직접 읽는 대신 milvus-table 외부 컬렉션 형식을 사용하십시오. Milvus 스냅샷에는 컬렉션 메타데이터, 세그먼트 매니페스트, 삭제 로그 및 기본 키 통계가 저장되므로, Milvus는 올바른 스키마와 삭제 세미오틱을 유지하기 위해 스냅샷 메타데이터 JSON과 milvus-table 리더가 필요합니다.
이 워크플로는 스냅샷 데이터에 대해 쿼리 가능한 외부 컬렉션을 생성합니다. 주요 열 데이터는 스냅샷 소스에서 계속 참조되며, 새로 고침(refresh) 단계에서는 소스 StorageV3 매니페스트를 대상 외부 세그먼트로 매핑합니다.
1단계: 스냅샷 메타데이터 경로 확인
일반 Milvus 컬렉션에서 스냅샷을 생성하거나 선택한 다음, 해당 스냅샷을 설명하여 오브젝트 스토리지 위치를 확인합니다.
from pymilvus import DataType, MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
snapshot_info = client.describe_snapshot(
snapshot_name="analytics_snapshot_20260321",
collection_name="my_collection",
include_collection_info=True
)
external_source = f"s3://bucket/{snapshot_info.s3_location}"
2단계: milvus-table 외부 컬렉션 생성 및 새로 고침
스키마가 스냅샷 소스 컬렉션과 일치하는 외부 컬렉션을 생성합니다. ‘ external_spec.format ’을 ‘ "milvus-table" ’로 설정하고, 각 대상 데이터 필드의 ‘ external_field ’을 해당 소스 필드 이름으로 설정합니다.
schema = client.create_schema(
external_source=external_source,
external_spec="""{
"format": "milvus-table",
"extfs": {
"cloud_provider": "aws",
"region": "us-west-2",
"access_key_id": "YOUR_ACCESS_KEY",
"access_key_value": "YOUR_SECRET_KEY"
}
}""",
)
schema.add_field(
field_name="id",
datatype=DataType.INT64,
is_primary=True,
external_field="id",
)
schema.add_field(
field_name="embedding",
datatype=DataType.FLOAT_VECTOR,
dim=768,
external_field="embedding",
)
client.create_collection(
collection_name="snapshot_external_collection",
schema=schema,
)
job_id = client.refresh_external_collection(
collection_name="snapshot_external_collection"
)
갱신이 완료된 후에는 인덱스를 생성하고, 외부 컬렉션을 로드하며, 스냅샷 기반 뷰에 대해 검색 또는 쿼리 작업을 실행할 수 있습니다.