База данных
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" \
--header "Request-Timeout: 10" \
-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" \
--header "Request-Timeout: 10" \
-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" \
--header "Request-Timeout: 10" \
-d '{
"dbName": "default"
}'
Управление свойствами базы данных
Каждая база данных имеет свои свойства, вы можете задать свойства базы данных при ее создании, как описано в разделе "Создание базы данных", или изменить и сбросить свойства любой существующей базы данных.
В следующей таблице перечислены возможные свойства базы данных.
Имя свойства |
Тип |
Описание свойства |
|---|---|---|
|
integer |
Количество реплик для указанной базы данных. |
|
string |
Имена групп ресурсов, связанных с указанной базой данных, в виде списка, разделенного запятыми. |
|
integer |
Максимальный размер дискового пространства для указанной базы данных, в мегабайтах (МБ). |
|
целое число |
Максимальное количество коллекций, допустимое в указанной базе данных. |
|
boolean |
Запрещать ли указанной базе данных операции записи. |
|
boolean |
Запрещать ли указанной базе данных операции чтения. |
|
string |
Указывает часовой пояс по умолчанию, применяемый к операциям с чувствительными ко времени данными в базе данных, в частности для полей |
Изменение свойств базы данных
Вы можете изменить свойства существующей базы данных следующим образом. Следующий пример ограничивает количество коллекций, которые можно создать в базе данных.
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" \
--header "Request-Timeout: 10" \
-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" \
--header "Request-Timeout: 10" \
-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" \
--header "Request-Timeout: 10" \
-d '{
"dbName": "my_database"
}'
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Как управлять правами доступа к базе данных?
Milvus использует управление доступом на основе ролей (RBAC) для управления разрешениями. Вы можете создавать роли с определенными привилегиями и назначать их пользователям, таким образом контролируя их доступ к различным базам данных. Для получения более подробной информации обратитесь к документации по RBAC.
Существуют ли ограничения на квоты для баз данных?
Да, Milvus позволяет устанавливать ограничения на квоты для базы данных, например максимальное количество коллекций. Полный список ограничений см. в документации Milvus Limits.