엔티티 삽입
이 섹션에서는 클라이언트 측을 통해 Milvus에 데이터를 삽입하는 방법을 설명합니다.
또한 Milvus에 데이터를 이관하기 위해 MilvusDM을 사용할 수도 있습니다. MilvusDM은 Milvus 데이터의 가져오기와 내보내기를 목적으로 특별히 설계된 오픈소스 도구입니다.
Milvus 2.1은 스칼라 필드에서 VARCHAR
데이터 유형을 지원합니다. VARCHAR 유형의 스칼라 필드에 대한 인덱스를 빌드할 때 기본 인덱스 유형은 트라이입니다.
다음 예제는 무작위 생성된 2,000개의 행을 샘플 데이터로 삽입합니다 (Milvus CLI 예제는 유사한 데이터를 포함하는 미리 빌드된 원격 CSV 파일을 사용합니다). 실제 응용 프로그램에서는 예제보다 더 높은 차원의 벡터를 사용하는 경우가 많습니다. 샘플 데이터를 대체할 데이터를 준비할 수 있습니다.
데이터 준비
먼저 삽입할 데이터를 준비합니다. 삽입할 데이터 유형은 컬렉션의 스키마와 일치해야 하며, 그렇지 않으면 Milvus가 예외를 발생시킵니다.
Milvus는 주요 키 필드를 제외한 스칼라 필드에 대해 기본값을 지원합니다. 따라서 데이터 삽입 또는 업데이트 중에 일부 필드는 비워둘 수 있습니다. 자세한 내용은 컬렉션 생성을 참조하십시오.
동적 스키마를 활성화한 후에는 데이터에 동적 필드를 추가할 수 있습니다. 자세한 정보는 동적 스키마를 참조하십시오.
import random
data = [
[i for i in range(2000)],
[str(i) for i in range(2000)],
[i for i in range(10000, 12000)],
[[random.random() for _ in range(2)] for _ in range(2000)],
[],
None,
]
data.append([str("dy"*i) for i in range(2000)])
Milvus에 데이터 삽입
컬렉션에 데이터를 삽입합니다.
partition_name
을 지정하여 데이터를 삽입할 파티션을 선택할 수 있습니다.
from pymilvus import Collection
collection = Collection("book") # 기존 컬렉션 가져오기.
mr = collection.insert(data)
매개변수 | 설명 |
---|---|
data |
Milvus에 삽입할 데이터입니다. |
partition_name (옵션) |
데이터가 삽입될 파티션의 이름입니다. |
이전에 색인이 작성된 컬렉션에 엔티티를 삽입한 후에는 Milvus가 자동으로 새로 삽입된 데이터에 대해 인덱스를 생성하므로 컬렉션을 다시 색인할 필요가 없습니다. 자세한 내용은 "벡터를 삽입한 후에 인덱스를 생성할 수 있나요?"를 참조하십시오.
Milvus에서 데이터 새로 고침
Milvus에 데이터를 삽입하면 세그먼트에 삽입됩니다. 세그먼트는 봉인되고 인덱싱하기 위해 일정한 크기에 도달해야 합니다. 미봉인된 세그먼트는 브루트포스 검색을 사용합니다. 이러한 상황을 피하기 위해 나머지 데이터에 대해 flush()
를 호출하는 것이 좋습니다. flush()
호출은 나머지 세그먼트를 봉인하고 인덱스로 보냅니다. 이 메서드는 삽입 세션의 끝에서만 호출하는 것이 중요합니다. 너무 자주 호출하면 후에 정리해야 할 조각난 데이터가 생길 수 있습니다.
제한 사항
기능 | 최대 제한 |
---|---|
벡터 차원 | 32,768 |
엔티티 업서트
업서트 업데이트는 삽입 및 삭제 작업의 조합입니다. Milvus 벡터 데이터베이스의 맥락에서 업데이트는 데이터 수준의 작업입니다. 지정된 필드가 컬렉션에 있는 경우 기존 엔티티를 덮어씁니다. 지정된 값이 존재하지 않는 경우 새로운 엔티티를 삽입합니다.
다음 예제는 무작위 생성된 3,000개의 행을 샘플 데이터로 업데이트합니다. 업데이트 작업을 수행할 때 이 작업이 데이터 삭제를 포함하기 때문에 성능에 영향을 줄 수 있음에 유의하는 것이 중요합니다.
데이터 준비
먼저 업데이트할 데이터를 준비합니다. 업데이트할 데이터 유형은 컬렉션의 스키마와 일치해야 하며, 그렇지 않으면 Milvus가 예외를 발생시킵니다.
Milvus는 주요 키 필드를 제외한 스칼라 필드에 대해 기본값을 지원합니다. 따라서 데이터 삽입 또는 업데이트 중에 일부 필드는 비워둘 수 있습니다. 자세한 내용은 컬렉션 생성을 참조하십시오.
import random
nb = 3000
dim = 8
vectors = [[random.random() for _ in range(dim)] for _ in range(nb)]
data = [
[i for i in range(nb)],
[str(i) for i in range(nb)],
[i for i in range(10000, 10000+nb)],
vectors,
[str("dy"*i) for i in range(nb)]
]
데이터 업데이트
컬렉션에 데이터를 업데이트합니다.
from pymilvus import Collection
collection = Collection("book") # 기존 컬렉션 가져오기.
mr = collection.upsert(data)
엔티티 삭제
Milvus는 주요 키를 통해 부울 표현식을 사용하여 엔티티 삭제를 지원합니다.
불리언 표현식 준비
삭제할 엔티티를 필터링할 불리언 표현식을 준비하세요.
Milvus는 명시적으로 지정된 기본 키를 가진 엔티티만 삭제할 수 있습니다. 이는 "in" 연산자를 사용하여 달성할 수 있습니다. 다른 연산자는 쿼리나 벡터 검색을 위한 스칼라 필터링에만 사용할 수 있습니다.
다음 예제는 0과 1의 기본 키 값을 사용하여 데이터를 필터링합니다.
expr = "book_id in [0,1]"
SQL WHERE 절과 유사한 형식
엔티티 삭제
만든 불리언 표현식을 사용하여 엔티티를 삭제하세요. Milvus는 삭제된 엔티티의 ID 목록을 반환합니다.
from pymilvus import Collection
collection = Collection("book") # 기존 컬렉션을 가져옵니다.
collection.delete(expr)
데이터 압축
Milvus는 기본적으로 자동 데이터 압축을 지원합니다. Milvus를 구성하여 압축 및 자동 압축을 활성화하거나 비활성화할 수 있습니다.
자동 압축이 비활성화되면 여전히 수동으로 데이터를 압축할 수 있습니다.
데이터 수동 압축
일반적으로 압축은 오랜 시간이 걸리므로 압축 요청은 비동기적으로 처리됩니다.
from pymilvus import Collection
collection = Collection("book") # 기존 컬렉션을 가져옵니다.
collection.compact()
압축 상태 확인
수동으로 압축을 트리거한 후 반환된 압축 ID를 사용하여 압축 상태를 확인할 수 있습니다.
collection.get_compaction_state()