• Sobre Milvus
  • Começar a trabalhar
  • Conceitos
  • Guia do utilizador
    • Colecções
    • Esquema e campos de dados
    • Inserir e apagar
    • Índices
    • Pesquisar
    • Embeddings e Reranking
    • Otimização do armazenamento
  • Importação de dados
  • Ferramentas de IA
  • Guia de Administração
  • Ferramentas
  • Integrações
  • Tutoriais
  • FAQs
  • API Reference

Base de dados

O Milvus introduz uma camada de base de dados acima das colecções, proporcionando uma forma mais eficiente de gerir e organizar os seus dados, ao mesmo tempo que suporta multi-tenancy.

O que é uma base de dados

Em Milvus, uma base de dados serve como uma unidade lógica para organizar e gerir dados. Para aumentar a segurança dos dados e alcançar o multi-tenancy, pode criar várias bases de dados para isolar logicamente os dados para diferentes aplicações ou inquilinos. Por exemplo, crie uma base de dados para armazenar os dados do utilizador A e outra base de dados para o utilizador B.

Criar base de dados

Pode utilizar a API RESTful Milvus ou os SDKs para criar dados de forma programática.

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

Também pode definir propriedades para a base de dados quando a cria. O exemplo a seguir define o número de réplicas da base de dados.

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

Visualizar bases de dados

Pode utilizar a API RESTful Milvus ou SDKs para listar todas as bases de dados existentes e ver os seus detalhes.

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

Gerir as propriedades das bases de dados

Cada base de dados tem as suas próprias propriedades. Pode definir as propriedades de uma base de dados quando a cria, conforme descrito em Criar base de dados, ou pode alterar e eliminar as propriedades de qualquer base de dados existente.

A tabela seguinte lista as possíveis propriedades da base de dados.

Propriedade Nome

Tipo de propriedade

Descrição da propriedade

database.replica.number

número inteiro

O número de réplicas da base de dados especificada.

database.resource_groups

string

Os nomes dos grupos de recursos associados à base de dados especificada numa lista separada por vírgulas.

database.diskQuota.mb

integer

O tamanho máximo do espaço em disco para a base de dados especificada, em megabytes (MB).

database.max.collections

número inteiro

O número máximo de colecções permitido na base de dados especificada.

database.force.deny.writing

booleano

Se a base de dados especificada deve ser forçada a recusar operações de escrita.

database.force.deny.reading

booleano

Se a base de dados especificada deve ser forçada a recusar operações de leitura.

timezone

string

Especifica o fuso horário padrão aplicado a operações sensíveis ao tempo dentro da base de dados, particularmente para os campos TIMESTAMPTZ. As colecções herdam o fuso horário da base de dados, a menos que seja definido um fuso horário ao nível da coleção. Um parâmetro de fuso horário ao nível da consulta pode substituir temporariamente as predefinições da base de dados e da coleção. O valor deve ser um identificador de fuso horário IANA válido (por exemplo, Ásia/Shanghai, América/Chicago ou UTC). Para obter detalhes sobre como usar um campo TIMESTAMPTZ, consulte Campo TIMESTAMPTZ.

Alterar as propriedades da base de dados

É possível alterar as propriedades de uma base de dados existente da seguinte forma. O exemplo a seguir limita o número de coleções que você pode criar na base de dados.

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

Eliminar propriedades da base de dados

Você também pode redefinir uma propriedade de banco de dados descartando-a da seguinte forma. O exemplo a seguir remove o limite do número de colecções que pode criar na base de dados.

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

Usar base de dados

Pode mudar de uma base de dados para outra sem se desligar do Milvus.

A API RESTful não suporta esta operação.

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.

Largar base de dados

Quando uma base de dados já não for necessária, pode eliminá-la. Note que:

  • As bases de dados predefinidas não podem ser eliminadas.

  • Antes de eliminar uma base de dados, é necessário eliminar primeiro todas as colecções da base de dados.

Pode utilizar a API RESTful Milvus ou SDKs para criar dados de forma programática.

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

PERGUNTAS FREQUENTES

Como posso gerir as permissões de uma base de dados?

Milvus utiliza o Controlo de Acesso Baseado em Funções (RBAC) para gerir as permissões. Pode criar funções com privilégios específicos e atribuí-las a utilizadores, controlando assim o seu acesso a diferentes bases de dados. Para mais pormenores, consulte a documentação RBAC.

Existem limitações de quotas para uma base de dados?

Sim, o Milvus permite-lhe definir limitações de quotas para uma base de dados, tais como o número máximo de colecções. Para obter uma lista completa de limitações, consulte a documentação do Milvus Limits.