Milvus 데이터 입력 — insert와 upsert 이해하기

Milvus 데이터 입력 — insert와 upsert 이해하기

Milvus에서 컬렉션의 데이터 레코드를 엔티티(entity) 라고 해요. 같은 컬렉션 안의 엔티티는 같은 필드 구성(스키마)을 공유합니다. 이 페이지에서는 엔티티를 어떻게 컬렉션에 넣는지 살펴볼게요.

출처: https://milvus.io/docs/insert-update-delete.md

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
)

지정된 폴더의 파티션에 데이터가 들어가면, 검색 시 해당 파티션만 대상으로 좁혀 검색할 수 있어 검색 성능을 올리는 데 유용합니다.

더 알아보기