로드 및 릴리스
컬렉션을 로드하는 것은 컬렉션에서 유사도 검색 및 쿼리를 수행하기 위한 전제 조건입니다. 이 페이지에서는 컬렉션을 로드하고 해제하는 절차에 대해 중점적으로 설명합니다.
컬렉션 로드
컬렉션을 로드하면 검색 및 쿼리에 신속하게 응답할 수 있도록 Milvus는 인덱스 파일과 모든 필드의 원시 데이터를 메모리에 로드합니다. 컬렉션 로드 후에 삽입된 엔티티는 자동으로 인덱싱되어 로드됩니다.
다음 코드 스니펫은 컬렉션을 로드하는 방법을 보여줍니다.
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
# 7. Load the collection
client.load_collection(
collection_name="customized_setup_1"
)
res = client.get_load_state(
collection_name="customized_setup_1"
)
print(res)
# Output
#
# {
# "state": "<LoadState: Loaded>"
# }
import io.milvus.v2.service.collection.request.LoadCollectionReq;
import io.milvus.v2.service.collection.request.GetLoadStateReq;
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
String CLUSTER_ENDPOINT = "http://localhost:19530";
String TOKEN = "root:Milvus";
// 1. Connect to Milvus server
ConnectConfig connectConfig = ConnectConfig.builder()
.uri(CLUSTER_ENDPOINT)
.token(TOKEN)
.build();
MilvusClientV2 client = new MilvusClientV2(connectConfig);
// 6. Load the collection
LoadCollectionReq loadCollectionReq = LoadCollectionReq.builder()
.collectionName("customized_setup_1")
.build();
client.loadCollection(loadCollectionReq);
// 7. Get load state of the collection
GetLoadStateReq loadStateReq = GetLoadStateReq.builder()
.collectionName("customized_setup_1")
.build();
Boolean res = client.getLoadState(loadStateReq);
System.out.println(res);
// Output:
// true
import { MilvusClient, DataType } from "@zilliz/milvus2-sdk-node";
const address = "http://localhost:19530";
const token = "root:Milvus";
const client = new MilvusClient({address, token});
// 7. Load the collection
res = await client.loadCollection({
collection_name: "customized_setup_1"
})
console.log(res.error_code)
// Output
//
// Success
//
res = await client.getLoadState({
collection_name: "customized_setup_1"
})
console.log(res.state)
// Output
//
// LoadStateLoaded
//
import (
"context"
"fmt"
"log"
"github.com/milvus-io/milvus/client/v2"
)
defer cli.Close(ctx)
loadTask, err := cli.LoadCollection(ctx, client.NewLoadCollectionOption("customized_setup_1"))
if err != nil {
// handle error
}
// sync wait collection to be loaded
err = loadTask.Await(ctx)
if err != nil {
// handle error
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/load" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_1"
}'
# {
# "code": 0,
# "data": {}
# }
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/get_load_state" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"collectionName": "customized_setup_1"
}'
# {
# "code": 0,
# "data": {
# "loadProgress": 100,
# "loadState": "LoadStateLoaded",
# "message": ""
# }
# }
특정 필드 로드
Milvus는 검색 및 쿼리와 관련된 필드만 로드할 수 있어 메모리 사용량을 줄이고 검색 성능을 개선할 수 있습니다.
다음 코드 스니펫은 customized_setup_2라는 컬렉션을 생성하고 이 컬렉션에 my_id와 my_vector라는 두 개의 필드가 있다고 가정합니다.
client.load_collection(
collection_name="customized_setup_1",
# highlight-next-line
load_fields=["my_id", "my_vector"] # Load only the specified fields
skip_load_dynamic_field=True # Skip loading the dynamic field
)
res = client.get_load_state(
collection_name="customized_setup_1"
)
print(res)
# Output
#
# {
# "state": "<LoadState: Loaded>"
# }
// 6. Load the collection
LoadCollectionReq loadCollectionReq = LoadCollectionReq.builder()
.collectionName("customized_setup_1")
.loadFields(Arrays.asList("my_id", "my_vector"))
.build();
client.loadCollection(loadCollectionReq);
// 7. Get load state of the collection
GetLoadStateReq loadStateReq = GetLoadStateReq.builder()
.collectionName("customized_setup_1")
.build();
Boolean res = client.getLoadState(loadStateReq);
System.out.println(res);
await client.load_collection({
collection_name: "customized_setup_1",
load_fields: ["my_id", "my_vector"], // Load only the specified fields
skip_load_dynamic_field: true //Skip loading the dynamic field
});
const loadState = client.getCollectionLoadState({
collection_name: "customized_setup_1",
})
console.log(loadState);
import (
"context"
"fmt"
"log"
"github.com/milvus-io/milvus/client/v2"
)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
loadTask, err := cli.LoadCollection(ctx, client.NewLoadCollectionOption("customized_setup_1").
WithLoadFields("my_id", "my_vector"))
if err != nil {
// handle error
}
// sync wait collection to be loaded
err = loadTask.Await(ctx)
if err != nil {
// handle error
}
# REST 缺失
특정 필드를 로드하도록 선택한 경우 load_fields
에 포함된 필드만 검색 및 쿼리에서 필터 및 출력 필드로 사용할 수 있다는 점에 유의할 필요가 있습니다. 항상 load_fields
에 기본 필드의 이름과 하나 이상의 벡터 필드를 포함해야 합니다.
skip_load_dynamic_field
을 사용하여 동적 필드를 로드할지 여부를 결정할 수도 있습니다. 동적 필드는 $meta라는 이름의 예약된 JSON 필드이며 스키마에 정의되지 않은 모든 필드와 해당 값을 키-값 쌍으로 저장합니다. 동적 필드를 로드할 때 필드의 모든 키가 로드되어 필터링 및 출력에 사용할 수 있습니다. 동적 필드의 모든 키가 메타데이터 필터링 및 출력에 포함되지 않는 경우 skip_load_dynamic_field
을 True
으로 설정합니다.
컬렉션 로드 후 더 많은 필드를 로드하려면 먼저 컬렉션을 해제해야 인덱스 변경으로 인해 발생할 수 있는 오류를 방지할 수 있습니다.
컬렉션 릴리스
검색 및 쿼리는 메모리를 많이 사용하는 작업입니다. 비용을 절약하려면 현재 사용하지 않는 컬렉션을 해제하는 것이 좋습니다.
다음 코드 조각은 컬렉션을 해제하는 방법을 보여줍니다.
# 8. Release the collection
client.release_collection(
collection_name="custom_quick_setup"
)
res = client.get_load_state(
collection_name="custom_quick_setup"
)
print(res)
# Output
#
# {
# "state": "<LoadState: NotLoad>"
# }
import io.milvus.v2.service.collection.request.ReleaseCollectionReq;
// 8. Release the collection
ReleaseCollectionReq releaseCollectionReq = ReleaseCollectionReq.builder()
.collectionName("custom_quick_setup")
.build();
client.releaseCollection(releaseCollectionReq);
GetLoadStateReq loadStateReq = GetLoadStateReq.builder()
.collectionName("custom_quick_setup")
.build();
Boolean res = client.getLoadState(loadStateReq);
System.out.println(res);
// Output:
// false
// 8. Release the collection
res = await client.releaseCollection({
collection_name: "custom_quick_setup"
})
console.log(res.error_code)
// Output
//
// Success
//
res = await client.getLoadState({
collection_name: "custom_quick_setup"
})
console.log(res.state)
// Output
//
// LoadStateNotLoad
//
import (
"context"
"github.com/milvus-io/milvus/client/v2"
)
err := cli.ReleaseCollection(ctx, client.NewReleaseCollectionOption("custom_quick_setup"))
if err != nil {
// handle error
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/release" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"collectionName": "custom_quick_setup"
}'
# {
# "code": 0,
# "data": {}
# }
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/get_load_state" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"collectionName": "custom_quick_setup"
}'
# {
# "code": 0,
# "data": {
# "loadProgress": 0,
# "loadState": "LoadStateNotLoaded",
# "message": ""
# }
# }