• О Милвусе
  • Начать
  • Концепции
  • Руководство пользователя
    • Коллекции
    • Схема и поля данных
    • Вставка и удаление
    • Индексы
    • Поиск
    • Вкрапления и рерайтинг
    • Оптимизация хранения
  • Импорт данных
  • Инструменты искусственного интеллекта
  • Руководство по администрированию
  • Инструменты
  • Интеграции
  • Учебники
  • Вопросы и ответы
  • API Reference

База данных

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"
}'

Управление свойствами базы данных

Каждая база данных имеет свои свойства, вы можете задать свойства базы данных при ее создании, как описано в разделе "Создание базы данных", или изменить и сбросить свойства любой существующей базы данных.

В следующей таблице перечислены возможные свойства базы данных.

Имя свойства

Тип

Описание свойства

database.replica.number

integer

Количество реплик для указанной базы данных.

database.resource_groups

string

Имена групп ресурсов, связанных с указанной базой данных, в виде списка, разделенного запятыми.

database.diskQuota.mb

integer

Максимальный размер дискового пространства для указанной базы данных, в мегабайтах (МБ).

database.max.collections

целое число

Максимальное количество коллекций, допустимое в указанной базе данных.

database.force.deny.writing

boolean

Запрещать ли указанной базе данных операции записи.

database.force.deny.reading

boolean

Запрещать ли указанной базе данных операции чтения.

timezone

string

Указывает часовой пояс по умолчанию, применяемый к операциям с чувствительными ко времени данными в базе данных, в частности для полей TIMESTAMPTZ. Коллекции наследуют часовой пояс базы данных, если не задан часовой пояс на уровне коллекции. Параметр часового пояса на уровне запроса может временно отменить значения по умолчанию как для базы данных, так и для коллекции. Значение должно быть действительным идентификатором часового пояса IANA (например, Asia/Shanghai, America/Chicago или UTC). Подробные сведения об использовании поля TIMESTAMPTZ см. в разделе Поле TIMESTAMPTZ.

Изменение свойств базы данных

Вы можете изменить свойства существующей базы данных следующим образом. Следующий пример ограничивает количество коллекций, которые можно создать в базе данных.

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.