• À propos de Milvus
  • Commencer
  • Concepts
  • Guide de l'utilisateur
    • Collections
    • Schéma et champs de données
    • Insérer et supprimer
    • Index
    • Recherche
    • Embeddings & Reranking
    • Optimisation du stockage
  • Importation de données
  • Outils d'IA
  • Guide d'administration
  • Outils
  • Intégrations
  • Tutoriels
  • FAQ
  • API Reference

Base de données

Milvus introduit une couche de base de données au-dessus des collections, offrant un moyen plus efficace de gérer et d'organiser vos données tout en prenant en charge la multi-location.

Qu'est-ce qu'une base de données ?

Dans Milvus, une base de données sert d'unité logique pour organiser et gérer les données. Pour améliorer la sécurité des données et parvenir à une multi-location, vous pouvez créer plusieurs bases de données afin d'isoler logiquement les données pour différentes applications ou différents locataires. Par exemple, vous créez une base de données pour stocker les données de l'utilisateur A et une autre base de données pour l'utilisateur B.

Créer une base de données

Vous pouvez utiliser l'API RESTful ou les SDK de Milvus pour créer des données par programme.

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

Vous pouvez également définir les propriétés de la base de données lorsque vous la créez. L'exemple suivant définit le nombre de répliques de la base de données.

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

Visualisation des bases de données

Vous pouvez utiliser l'API RESTful ou les SDK Milvus pour répertorier toutes les bases de données existantes et afficher leurs détails.

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

Gérer les propriétés des bases de données

Chaque base de données a ses propres propriétés. Vous pouvez définir les propriétés d'une base de données lorsque vous la créez, comme décrit dans Créer une base de données, ou vous pouvez modifier et supprimer les propriétés d'une base de données existante.

Le tableau suivant répertorie les propriétés possibles des bases de données.

Propriété Nom

Type de propriété

Description de la propriété

database.replica.number

nombre entier

Nombre de répliques pour la base de données spécifiée.

database.resource_groups

chaîne

Les noms des groupes de ressources associés à la base de données spécifiée dans une liste séparée par des virgules.

database.diskQuota.mb

entier

Taille maximale de l'espace disque pour la base de données spécifiée, en mégaoctets (Mo).

database.max.collections

nombre entier

Nombre maximal de collections autorisées dans la base de données spécifiée.

database.force.deny.writing

booléen

Obliger ou non la base de données spécifiée à refuser les opérations d'écriture.

database.force.deny.reading

booléen

Indique s'il faut forcer la base de données spécifiée à refuser les opérations de lecture.

timezone

chaîne de caractères

Spécifie le fuseau horaire par défaut appliqué aux opérations sensibles à l'heure dans la base de données, en particulier pour les champs TIMESTAMPTZ. Les collections héritent du fuseau horaire de la base de données, sauf si un fuseau horaire est défini au niveau de la collection. Un paramètre de fuseau horaire au niveau de la requête peut temporairement remplacer les valeurs par défaut de la base de données et de la collection. La valeur doit être un identifiant de fuseau horaire IANA valide (par exemple, Asia/Shanghai, America/Chicago ou UTC). Pour plus d'informations sur l'utilisation d'un champ TIMESTAMPTZ, reportez-vous à la rubrique Champ TIMESTAMPTZ.

Modifier les propriétés d'une base de données

Vous pouvez modifier les propriétés d'une base de données existante comme suit. L'exemple suivant limite le nombre de collections que vous pouvez créer dans la base de données.

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

Supprimer les propriétés d'une base de données

Vous pouvez également réinitialiser une propriété de base de données en la supprimant comme suit. L'exemple suivant supprime la limite du nombre de collections que vous pouvez créer dans la base de données.

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

Utiliser la base de données

Vous pouvez passer d'une base de données à une autre sans vous déconnecter de Milvus.

L'API RESTful ne prend pas en charge cette opération.

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.

Abandonner la base de données

Lorsqu'une base de données n'est plus nécessaire, vous pouvez la supprimer. Notez que :

  • Les bases de données par défaut ne peuvent pas être supprimées.

  • Avant de supprimer une base de données, vous devez d'abord supprimer toutes les collections de la base de données.

Vous pouvez utiliser l'API RESTful Milvus ou les SDK pour créer des données par programme.

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

FAQ

Comment gérer les autorisations pour une base de données ?

Milvus utilise le contrôle d'accès basé sur les rôles (RBAC) pour gérer les autorisations. Vous pouvez créer des rôles avec des privilèges spécifiques et les attribuer à des utilisateurs, contrôlant ainsi leur accès à différentes bases de données. Pour plus de détails, voir la documentation RBAC.

Existe-t-il des limitations de quotas pour une base de données ?

Oui, Milvus vous permet de définir des limitations de quotas pour une base de données, telles que le nombre maximum de collections. Pour une liste complète des limitations, veuillez vous référer à la documentation Limites de Milvus.