개체 삽입
이 주제에서는 클라이언트 측에서 Milvus에 데이터를 삽입하는 방법에 대해 설명합니다.
또한 MilvusDM을 사용하여 데이터를 Milvus로 이관할 수도 있습니다. MilvusDM은 Milvus와 데이터를 가져오고 내보내기 위해 특별히 설계된 오픈 소스 도구입니다.
Milvus 2.1은 스칼라 필드의 VARCHAR
데이터 유형을 지원합니다. VARCHAR 유형의 스칼라 필드에 대한 색인을 작성할 때 기본 색인 유형은 trie입니다.
다음 예제는 랜덤으로 생성된 2,000개의 행을 샘플 데이터로 삽입합니다 (Milvus CLI 예제는 유사한 데이터를 포함하는 미리 빌드된 원격 CSV 파일을 사용합니다). 실제 응용 프로그램은 예제보다 더 높은 차원의 벡터를 사용할 수 있습니다. 예제를 대체하기 위해 고유한 데이터를 준비할 수 있습니다.
데이터 준비
먼저 삽입할 데이터를 준비합니다. 삽입할 데이터의 데이터 유형은 컬렉션의 스키마와 일치해야 하며, 그렇지 않으면 Milvus가 예외를 throw합니다.
Milvus는 기본 키 필드를 제외한 스칼라 필드에 대해 기본값을 지원합니다. 이는 데이터 삽입 또는 업데이트 중에 특정 필드를 비워둘 수 있다는 것을 의미합니다. 자세한 내용은 컬렉션 생성을 참조하십시오.
동적 스키마를 활성화한 후, 데이터에 동적 필드를 추가할 수 있습니다. 자세한 내용은 동적 스키마를 참조하십시오.
bookIDs := make([]int64, 0, 2000)
wordCounts := make([]int64, 0, 2000)
bookIntros := make([][]float32, 0, 2000)
for i := 0; i < 2000; i++ {
bookIDs = append(bookIDs, int64(i))
wordCounts = append(wordCounts, int64(i+10000))
v := make([]float32, 0, 2)
for j := 0; j < 2; j++ {
v = append(v, rand.Float32())
}
bookIntros = append(bookIntros, v)
}
idColumn := entity.NewColumnInt64("book_id", bookIDs)
wordColumn := entity.NewColumnInt64("word_count", wordCounts)
introColumn := entity.NewColumnFloatVector("book_intro", 2, bookIntros)
Milvus에 데이터 삽입
데이터를 컬렉션에 삽입합니다.
partition_name
을 지정하여 데이터를 삽입할 파티션을 선택할 수 있습니다.
_, err = milvusClient.Insert(
context.Background(), // ctx
"book", // CollectionName
"", // partitionName
idColumn, // columnarData
wordColumn, // columnarData
introColumn, // columnarData
)
if err != nil {
log.Fatal("데이터 삽입 실패:", err.Error())
}
매개변수 | 설명 |
---|---|
ctx |
API 호출 프로세스를 제어하는 데 사용되는 컨텍스트 |
CollectionName |
데이터를 삽입할 컬렉션의 이름 |
partitionName |
데이터를 삽입할 파티션의 이름. 비워둘 경우 데이터는 기본 파티션에 삽입됨 |
columnarData |
각 필드에 삽입할 데이터 |
이미 색인이 생성된 컬렉션에 개체를 삽입한 후에는 컬렉션을 다시 인덱싱할 필요가 없습니다. Milvus는 자동으로 새로 삽입된 데이터에 대해 색인을 생성합니다.
Milvus에서 데이터 새로 고침
Milvus에 데이터를 삽입하면 세그먼트에 데이터가 삽입됩니다. 세그먼트는 밀봉되고 색인이 생성되기 위해 일정한 크기에 도달해야 합니다. 밀봉되지 않은 세그먼트는 무차별 검색을 통해 쿼리됩니다. 이러한 상황을 피하기 위해 flush()
를 호출하는 것이 좋습니다. flush()
메서드는 남아있는 세그먼트를 밀봉하고 색인으로 보냅니다. 이 메서드는 삽입 세션이 끝났을 때에만 호출하는 것이 매우 중요합니다. 이 메서드를 너무 자주 호출하면 단편화된 데이터가 발생하여 나중에 정리해야 할 수도 있습니다.
제한 사항
기능 | 최대 제한 |
---|---|
벡터 차원 | 32,768 |
데이터 업데이트
데이터 준비
우선, 업데이트할 데이터를 준비합니다. 업데이트할 데이터 유형은 컬렉션의 스키마와 일치해야 하며, 그렇지 않을 경우 Milvus에서 예외가 발생합니다.
Milvus는 기본값을 지원하여 스칼라 필드에 대해 일부 필드를 비워둘 수 있습니다(기본 키 필드는 제외). 자세한 내용은 컬렉션 생성을 참조하십시오.
nEntities := 3000
dim := 8
idList := make([]int64, 0, nEntities)
randomList := make([]float64, 0, nEntities)
embeddingList := make([][]float32, 0, nEntities)
for i := 0; i < nEntities; i++ {
idList = append(idList, int64(i))
}
for i := 0; i < nEntities; i++ {
randomList = append(randomList, rand.Float64())
}
for i := 0; i < nEntities; i++ {
vec := make([]float32, 0, dim)
for j := 0; j < dim; j++ {
vec = append(vec, rand.Float32())
}
embeddingList = append(embeddingList, vec)
}
idColData := entity.NewColumnInt64("ID", idList)
randomColData := entity.NewColumnDouble("random", randomList)
embeddingColData := entity.NewColumnFloatVector("embeddings", dim, embeddingList)
데이터 업데이트
데이터를 컬렉션에 업데이트합니다.
if _, err := c.Upsert(ctx, collectionName, "", idColData, embeddingColData);
err != nil {
log.Fatalf("데이터 업데이트 실패, 오류: %v", err)
}