데이터베이스
Milvus는 컬렉션 위에 데이터베이스 계층을 도입하여 멀티테넌시를 지원하면서 데이터를 보다 효율적으로 관리하고 구성할 수 있는 방법을 제공합니다.
데이터베이스란 무엇인가요?
Milvus에서 데이터베이스는 데이터를 구성하고 관리하기 위한 논리적 단위 역할을 합니다. 데이터 보안을 강화하고 멀티 테넌시를 달성하기 위해 여러 데이터베이스를 생성하여 서로 다른 애플리케이션 또는 테넌트의 데이터를 논리적으로 분리할 수 있습니다. 예를 들어 사용자 A의 데이터를 저장하는 데이터베이스와 사용자 B를 위한 또 다른 데이터베이스를 만드는 것입니다.
데이터베이스 만들기
Milvus RESTful API 또는 SDK를 사용하여 프로그래밍 방식으로 데이터를 생성할 수 있습니다.
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
client.create_database(
db_name="my_database_1"
)
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.service.database.request.*;
ConnectConfig config = ConnectConfig.builder()
.uri("http://localhost:19530")
.token("root:Milvus")
.build();
MilvusClientV2 client = new MilvusClientV2(config);
CreateDatabaseReq createDatabaseReq = CreateDatabaseReq.builder()
.databaseName("my_database_1")
.build();
client.createDatabase(createDatabaseReq);
import {MilvusClient} from '@zilliz/milvus2-sdk-node';
const client = new MilvusClient({
address: "http://localhost:19530",
token: 'root:Milvus'
});
await client.createDatabase({
db_name: "my_database_1"
});
cli, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
Address: "localhost:19530",
Username: "Milvus",
Password: "root",
})
if err != nil {
// handle err
}
err = cli.CreateDatabase(ctx, milvusclient.NewCreateDatabaseOption("my_database_1"))
if err != nil {
// handle err
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/create" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"dbName": "my_database_1"
}'
데이터베이스를 만들 때 데이터베이스에 대한 속성을 설정할 수도 있습니다. 다음 예는 데이터베이스의 복제본 수를 설정하는 예제입니다.
client.create_database(
db_name="my_database_2",
properties={
"database.replica.number": 3
}
)
Map<String, String> properties = new HashMap<>();
properties.put("database.replica.number", "3");
CreateDatabaseReq createDatabaseReq = CreateDatabaseReq.builder()
.databaseName("my_database_2")
.properties(properties)
.build();
client.createDatabase(createDatabaseReq);
await client.createDatabase({
db_name: "my_database_2",
properties: {
"database.replica.number": 3
}
});
err := cli.CreateDatabase(ctx, milvusclient.NewCreateDatabaseOption("my_database_2").WithProperty("database.replica.number", 3))
if err != nil {
// handle err
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/create" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"dbName": "my_database_2",
"properties": {
"database.replica.number": 3
}
}'
데이터베이스 보기
Milvus RESTful API 또는 SDK를 사용하여 기존의 모든 데이터베이스를 나열하고 세부 정보를 볼 수 있습니다.
# List all existing databases
client.list_databases()
# Output
# ['default', 'my_database_1', 'my_database_2']
# Check database details
client.describe_database(
db_name="default"
)
# Output
# {"name": "default"}
import io.milvus.v2.service.database.response.*;
ListDatabasesResp listDatabasesResp = client.listDatabases();
DescribeDatabaseResp descDBResp = client.describeDatabase(DescribeDatabaseReq.builder()
.databaseName("default")
.build());
await client.describeDatabase({
db_name: 'default'
});
// List all existing databases
databases, err := cli.ListDatabase(ctx, milvusclient.NewListDatabaseOption())
if err != nil {
// handle err
}
log.Println(databases)
db, err := cli.DescribeDatabase(ctx, milvusclient.NewDescribeDatabaseOption("default"))
if err != nil {
// handle err
}
log.Println(db)
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/describe" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"dbName": "default"
}'
데이터베이스 속성 관리
각 데이터베이스에는 고유한 속성이 있으며 데이터베이스 생성에 설명된 대로 데이터베이스를 만들 때 데이터베이스 속성을 설정하거나 기존 데이터베이스의 속성을 변경하여 삭제할 수 있습니다.
다음 표에는 사용 가능한 데이터베이스 속성이 나열되어 있습니다.
속성 이름 |
유형 |
속성 설명 |
|---|---|---|
|
정수 |
지정된 데이터베이스의 복제본 수입니다. |
|
문자열 |
쉼표로 구분된 목록으로 지정된 데이터베이스와 연결된 리소스 그룹의 이름입니다. |
|
정수 |
지정한 데이터베이스의 디스크 공간 최대 크기(MB)입니다. |
|
정수 |
지정한 데이터베이스에 허용되는 최대 컬렉션 수입니다. |
|
부울 |
지정한 데이터베이스에서 쓰기 작업을 거부하도록 강제할지 여부입니다. |
|
boolean |
지정한 데이터베이스에서 읽기 작업을 거부하도록 할지 여부입니다. |
|
문자열 |
데이터베이스 내에서 시간에 민감한 작업, 특히 |
데이터베이스 속성 변경하기
다음과 같이 기존 데이터베이스의 속성을 변경할 수 있습니다. 다음 예제에서는 데이터베이스에 만들 수 있는 컬렉션의 수를 제한합니다.
client.alter_database_properties(
db_name="my_database_1",
properties={
"database.max.collections": 10
}
)
client.alterDatabaseProperties(AlterDatabasePropertiesReq.builder()
.databaseName("my_database_1")
.property("database.max.collections", "10")
.build());
await milvusClient.alterDatabaseProperties({
db_name: "my_database_1",
properties: {"database.max.collections", "10" },
})
err := cli.AlterDatabaseProperties(ctx, milvusclient.NewAlterDatabasePropertiesOption("my_database_1").
WithProperty("database.max.collections", 1))
if err != nil {
// handle err
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/alter" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"dbName": "my_database",
"properties": {
"database.max.collections": 10
}
}'
데이터베이스 속성 삭제
다음과 같이 데이터베이스 속성을 삭제하여 재설정할 수도 있습니다. 다음 예제는 데이터베이스에서 만들 수 있는 컬렉션 수에 대한 제한을 제거합니다.
client.drop_database_properties(
db_name="my_database_1",
property_keys=[
"database.max.collections"
]
)
client.dropDatabaseProperties(DropDatabasePropertiesReq.builder()
.databaseName("my_database_1")
.propertyKeys(Collections.singletonList("database.max.collections"))
.build());
await milvusClient.dropDatabaseProperties({
db_name: my_database_1,
properties: ["database.max.collections"],
});
err := cli.DropDatabaseProperties(ctx, milvusclient.NewDropDatabasePropertiesOption("my_database_1", "database.max.collections"))
if err != nil {
// handle err
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/alter" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"dbName": "my_database",
"propertyKeys": [
"database.max.collections"
]
}'
데이터베이스 사용
Milvus에서 연결을 끊지 않고도 한 데이터베이스에서 다른 데이터베이스로 전환할 수 있습니다.
RESTful API는 이 작업을 지원하지 않습니다.
client.use_database(
db_name="my_database_2"
)
client.useDatabase("my_database_2");
await milvusClient.useDatabase({
db_name: "my_database_2",
});
err = cli.UseDatabase(ctx, milvusclient.NewUseDatabaseOption("my_database_2"))
if err != nil {
// handle err
}
# This operation is unsupported because RESTful does not provide a persistent connection.
# As a workaround, initiate the required request again with the target database.
데이터베이스 삭제
데이터베이스가 더 이상 필요하지 않으면 데이터베이스를 삭제할 수 있습니다. 참고하세요:
기본 데이터베이스는 삭제할 수 없습니다.
데이터베이스를 삭제하기 전에 먼저 데이터베이스의 모든 컬렉션을 삭제해야 합니다.
Milvus RESTful API 또는 SDK를 사용하여 프로그래밍 방식으로 데이터를 생성할 수 있습니다.
client.drop_database(
db_name="my_database_2"
)
client.dropDatabase(DropDatabaseReq.builder()
.databaseName("my_database_2")
.build());
await milvusClient.dropDatabase({
db_name: "my_database_2",
});
err = cli.DropDatabase(ctx, milvusclient.NewDropDatabaseOption("my_database_2"))
if err != nil {
// handle err
}
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/drop" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"dbName": "my_database"
}'
FAQ
데이터베이스에 대한 권한은 어떻게 관리하나요?
Milvus는 역할 기반 액세스 제어(RBAC)를 사용하여 권한을 관리합니다. 특정 권한이 있는 역할을 생성하고 사용자에게 할당하여 다양한 데이터베이스에 대한 액세스를 제어할 수 있습니다. 자세한 내용은 RBAC 설명서를 참조하세요.
데이터베이스에 대한 쿼터 제한이 있나요?
예, Milvus에서는 최대 컬렉션 수와 같은 데이터베이스에 대한 쿼터 제한을 설정할 수 있습니다. 전체 제한 목록은 Milvus 제한 문서를 참조하세요.