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 multi-tenencia, puede crear múltiples bases de datos para aislar lógicamente los datos para diferentes aplicaciones o inquilinos. 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: "root",
Password: "Milvus",
})
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"
}'
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" \
-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" \
-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 |
|---|---|---|
|
entero |
Número de réplicas de la base de datos especificada. |
|
cadena |
Los nombres de los grupos de recursos asociados a la base de datos especificada en una lista separada por comas. |
|
entero |
El tamaño máximo del espacio en disco para la base de datos especificada, en megabytes (MB). |
|
entero |
El número máximo de colecciones permitidas en la base de datos especificada. |
|
booleano |
Si se desea forzar a la base de datos especificada a denegar operaciones de escritura. |
|
booleano |
Fuerza a la base de datos especificada a denegar operaciones de lectura. |
Modificar las propiedades de una base de datos
Puede modificar las propiedades de una base de datos existente como se indica a continuación. 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" \
-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" \
-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" \
-d '{
"dbName": "my_database"
}'