Milvus 데이터 입력 — insert와 upsert 이해하기
Milvus 데이터 입력 — insert와 upsert 이해하기
Milvus에서 컬렉션의 데이터 레코드를 엔티티(entity) 라고 해요. 같은 컬렉션 안의 엔티티는 같은 필드 구성(스키마)을 공유합니다. 이 페이지에서는 엔티티를 어떻게 컬렉션에 넣는지 살펴볼게요.
insert로 데이터 넣기
data에 딕셔너리 목록을 만들어 insert를 호출하면 됩니다. 각 딕셔너리는 id, vector, 그리고 메타데이터 color를 담고 있어요.
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
data=[
{"id": 0, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682"},
{"id": 1, "vector": [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, 0.2614474506242501, 0.838729485096104], "color": "red_7025"},
]
res = client.insert(
collection_name="quick_setup",
data=data
)
print(res)
# Output # {'insert_count': 10, 'ids': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}
insert와 upsert의 차이, 그리고 중복 처리
기본 insert는 기본 키 중복을 검사하지 않아요. 이미 있는 기본 키로 데이터를 삽입하면 같은 키를 가진 새 엔티티가 생기면서 데이터가 중복되고, 애플리케이션에 문제를 일으킬 수 있습니다.
기존 엔티티를 갱신하거나 중복을 피하려면 upsert 연산을 쓰세요. upsert는 기본 키가 있으면 갱신, 없으면 새로 넣는 방식이라 반복 실행에도 안전합니다.
파티션에 넣기
파티션은 컬렉션 내부의 논리적 분류이에요. partition_name을 지정하면 특정 파티션에 직접 데이터를 넣을 수 있습니다.
res = client.insert(
collection_name="quick_setup",
partition_name="partitionA",
data=data
)
지정된 폴더의 파티션에 데이터가 들어가면, 검색 시 해당 파티션만 대상으로 좁혀 검색할 수 있어 검색 성능을 올리는 데 유용합니다.
더 알아보기
- 전체 흐름은 Quickstart 참고
- 검색 방법은 Basic Vector Search 참고
- Docker 배포는 Run Milvus in Docker 참고