• Acerca de Milvus
  • Comenzar
  • Conceptos
  • Guía del usuario
    • Colecciones
    • Esquema y campos de datos
    • Insertar y eliminar
    • Índices
    • Buscar en
    • Embeddings y reordenación
    • Optimización del almacenamiento
  • Importación de datos
  • Herramientas de IA
  • Guía de administración
  • Herramientas
  • Integraciones
  • Tutoriales
  • Preguntas frecuentes
  • API Reference

Base de datos

Milvus introduce una capa de base de datos por encima de las colecciones, proporcionando una forma más eficiente de gestionar y organizar sus datos a la vez que soporta multi-tenancy.

Qué es una base de datos

En Milvus, una base de datos sirve como unidad lógica para organizar y gestionar datos. Para mejorar la seguridad de los datos y lograr la multiarrendamiento, puede crear varias bases de datos para aislar lógicamente los datos para diferentes aplicaciones o arrendatarios. Por ejemplo, cree una base de datos para almacenar los datos del usuario A y otra base de datos para el usuario B.

Crear base de datos

Puede utilizar la API RESTful de Milvus o los SDK para crear datos mediante programación.

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

También puede establecer propiedades para la base de datos cuando la crea. El siguiente ejemplo establece el número de réplicas de la base de datos.

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

Ver bases de datos

Puede utilizar la API RESTful de Milvus o SDKs para listar todas las bases de datos existentes y ver sus detalles.

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

Gestionar las propiedades de las bases de datos

Cada base de datos tiene sus propias propiedades, puede establecer las propiedades de una base de datos cuando cree la base de datos como se describe en Crear base de datos o puede alterar y eliminar las propiedades de cualquier base de datos existente.

La siguiente tabla enumera las posibles propiedades de las bases de datos.

Propiedad Nombre

Tipo

Propiedad Descripción

database.replica.number

entero

Número de réplicas de la base de datos especificada.

database.resource_groups

cadena

Los nombres de los grupos de recursos asociados a la base de datos especificada en una lista separada por comas.

database.diskQuota.mb

entero

El tamaño máximo del espacio en disco para la base de datos especificada, en megabytes (MB).

database.max.collections

entero

El número máximo de colecciones permitidas en la base de datos especificada.

database.force.deny.writing

booleano

Si se desea forzar a la base de datos especificada a denegar operaciones de escritura.

database.force.deny.reading

booleano

Obliga a la base de datos especificada a denegar operaciones de lectura.

timezone

cadena

Especifica la zona horaria por defecto aplicada a las operaciones sensibles a la hora dentro de la base de datos, en particular para los campos TIMESTAMPTZ. Las colecciones heredan la zona horaria de la base de datos a menos que se establezca una zona horaria a nivel de colección. Un parámetro de zona horaria a nivel de consulta puede anular temporalmente los valores predeterminados de la base de datos y de la colección. El valor debe ser un identificador de zona horaria IANA válido (por ejemplo, Asia/Shanghai, America/Chicago o UTC). Para obtener más información sobre cómo utilizar un campo TIMESTAMPTZ, consulte Campo TIMESTAMPTZ.

Modificar las propiedades de una base de datos

Puede modificar las propiedades de una base de datos existente del siguiente modo. El siguiente ejemplo limita el número de colecciones que se pueden crear en la base de datos.

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

Eliminar propiedades de la base de datos

También puedes restablecer una propiedad de la base de datos eliminándola como se indica a continuación. El siguiente ejemplo elimina el límite del número de colecciones que puedes crear en la base de datos.

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

Usar base de datos

Puede cambiar de una base de datos a otra sin desconectarse de Milvus.

La API RESTful no soporta esta operación.

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.

Eliminar base de datos

Cuando ya no necesite una base de datos, puede eliminarla. Tenga en cuenta que:

  • Las bases de datos por defecto no se pueden eliminar.

  • Antes de eliminar una base de datos, debe eliminar todas las colecciones de la base de datos.

Puede utilizar la API RESTful de Milvus o los SDK para crear datos mediante programación.

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

PREGUNTAS FRECUENTES

¿Cómo gestiono los permisos de una base de datos?

Milvus utiliza el Control de Acceso Basado en Roles (RBAC) para gestionar los permisos. Puede crear roles con privilegios específicos y asignarlos a usuarios, controlando así su acceso a diferentes bases de datos. Para más detalles, consulte la documentación de RBAC.

¿Existen limitaciones de cuota para una base de datos?

Sí, Milvus le permite establecer limitaciones de cuota para una base de datos, como el número máximo de colecciones. Para obtener una lista completa de limitaciones, consulte la documentación de Milvus Limits.