Gestion des bases de données

Tout comme les moteurs de base de données traditionnels, vous pouvez créer des bases de données dans Milvus et attribuer des autorisations à des utilisateurs spécifiques pour les gérer. Ces utilisateurs auront alors l'autorité de gérer les collections au sein des bases de données. Le cluster Milvus prend en charge jusqu'à 64 bases de données.

Créer une base de données

Pour créer une base de données, vous devez d'abord vous connecter au cluster Milvus et préparer un nom :

from pymilvus import connections, db

conn = connections.connect(host="127.0.0.1", port=19530)

base_de_donnees = db.create_database("livre")

Utiliser une base de données

Le cluster Milvus est livré avec une base de données par défaut nommée "default". Sauf indication contraire, les collections seront créées dans la base de données par défaut.

Pour changer la base de données par défaut, suivez ces étapes :

db.using_database("livre")

Vous pouvez également définir la base de données à utiliser lors de la connexion au cluster Milvus, comme indiqué ci-dessous :

conn = connections.connect(
    host="127.0.0.1",
    port="19530",
    db_name="default"
)

Liste des bases de données

Pour récupérer toutes les bases de données existantes dans le cluster Milvus, suivez ces étapes :

db.list_database()

['default', 'livre']

Supprimer une base de données

Pour supprimer une base de données, vous devez d'abord supprimer toutes ses collections. Sinon, la suppression échouera.

db.drop_database("livre")

db.list_database()

['default']

Utilisation de RBAC dans la base de données

Le RBAC couvre également les opérations sur les bases de données et garantit la compatibilité ascendante. Dans l'API de Permission (Accorder / Révoquer / Liste d'accords), le terme base de données a les significations suivantes :

  • Si à la fois la connexion à Milvus et l'appel à l'API de Permission ne spécifient pas db_name, base de données se réfère à la base de données par défaut.
  • Si la connexion à Milvus spécifie db_name, mais que les appels ultérieurs à l'API de Permission ne le font pas, base de données se réfère au nom de la base de données spécifié dans la connexion à Milvus.
  • Si un appel à l'API de Permission est effectué sur la connexion à Milvus, indépendamment de la spécification de db_name, base de données se réfère au nom de la base de données spécifié dans l'appel à l'API de Permission.

Le bloc de code suivant est partagé entre les blocs ci-dessous.

from pymilvus import connections, Role

_HOTE = '127.0.0.1'
_PORT = '19530'
_ROOT = "root"
_MDP_ROOT = "Milvus"
_ROLE_NOM = "role_test"
_PRIVILEGE_INSERTION = "insertion"


def se_connecter_a_milvus(nom_db="default"):
    print(f"Connexion à Milvus\n")
    connections.connect(host=_HOTE, port=_PORT, user=_ROOT, password=_MDP_ROOT, db_name=nom_db)

  • Si à la fois la connexion à Milvus et l'appel à l'API de Permission ne spécifient pas db_name, base de données se réfère à la base de données par défaut.
se_connecter_a_milvus()
role = Role(_ROLE_NOM)
role.create()

se_connecter_a_milvus()
role.grant("Collection", "*", _PRIVILEGE_INSERTION)
print(role.list_grants())
print(role.list_grant("Collection", "*"))
role.revoke("Global", "*", _PRIVILEGE_INSERTION)

  • Si la connexion à Milvus spécifie db_name, mais que les appels ultérieurs à l'API de Permission ne le font pas, base de données se réfère au nom de la base de données spécifié dans la connexion à Milvus.
se_connecter_a_milvus(nom_db="foo")
role.grant("Collection", "*", _PRIVILEGE_INSERTION)
print(role.list_grants())
print(role.list_grant("Collection", "*"))
role.revoke("Global", "*", _PRIVILEGE_INSERTION)

  • Si un appel à l'API de Permission est effectué sur la connexion à Milvus, indépendamment de la spécification de db_name, base de données se réfère au nom de la base de données spécifié dans l'appel à l'API de Permission.
nom_db = "foo"
se_connecter_a_milvus()
role.grant("Collection", "*", _PRIVILEGE_INSERTION, db_name=nom_db)
print(role.list_grants(db_name=nom_db))
print(role.list_grant("Collection", "*", db_name=nom_db))
role.revoke("Global", "*", _PRIVILEGE_INSERTION, db_name=nom_db)