Gestione dei database

Similmente ai motori di database tradizionali, è possibile creare database in Milvus e assegnare autorizzazioni a utenti specifici per gestirli. Questi utenti avranno quindi l'autorità per gestire le collezioni all'interno dei database. Il cluster Milvus supporta fino a 64 database.

Creazione di un database

Per creare un database, è necessario connettersi prima al cluster Milvus e preparare un nome:

from pymilvus import connections, db

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

database = db.create_database("book")

Utilizzo di un database

Il cluster Milvus dispone di un database predefinito chiamato "default". A meno che non venga specificato diversamente, le collezioni verranno create nel database predefinito.

Per cambiare il database predefinito, seguire questi passaggi:

db.using_database("book")

È inoltre possibile impostare il database da utilizzare durante la connessione al cluster Milvus, come mostrato di seguito:

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

Elencazione dei database

Per recuperare tutti i database esistenti nel cluster Milvus, seguire questi passaggi:

db.list_database()

['default', 'book']

Eliminazione di un database

Per eliminare un database, è necessario prima eliminare tutte le sue collezioni. Altrimenti, l'eliminazione fallirà.

db.drop_database("book")

db.list_database()

['default']

Utilizzo di RBAC nel database

RBAC copre anche le operazioni sui database e garantisce la compatibilità futura. Nell'API di autorizzazione (Concede / Revoca / Elenca Concessione), il termine database ha i seguenti significati:

  • Se sia la connessione Milvus che la chiamata API di autorizzazione non specificano db_name, database si riferisce al database predefinito.
  • Se la connessione Milvus specifica db_name, ma le successive chiamate API di autorizzazione no, database si riferisce al nome del database specificato nella connessione Milvus.
  • Se viene effettuata una chiamata API di autorizzazione sulla connessione Milvus, indipendentemente dal fatto che sia specificato db_name, database si riferisce al nome del database specificato nella chiamata API di autorizzazione.

Il seguente snippet di codice è condiviso tra i blocchi seguenti.

from pymilvus import connections, Role

_HOST = '127.0.0.1'
_PORT = '19530'
_ROOT = "root"
_ROOT_PASSWORD = "Milvus"
_ROLE_NAME = "test_role"
_PRIVILEGE_INSERT = "insert"


def connect_to_milvus(db_name="default"):
    print(f"Connessione a Milvus\n")
    connections.connect(host=_HOST, port=_PORT, user=_ROOT, password=_ROOT_PASSWORD, db_name=db_name)

  • Se sia la connessione Milvus che la chiamata API di autorizzazione non specificano db_name, database si riferisce al database predefinito.
connect_to_milvus()
role = Role(_ROLE_NAME)
role.create()

connect_to_milvus()
role.grant("Collection", "*", _PRIVILEGE_INSERT)
print(role.list_grants())
print(role.list_grant("Collection", "*"))
role.revoke("Global", "*", _PRIVILEGE_INSERT)

  • Se la connessione Milvus specifica db_name, ma le successive chiamate API di autorizzazione no, database si riferisce al nome del database specificato nella connessione Milvus.
connect_to_milvus(db_name="foo")
role.grant("Collection", "*", _PRIVILEGE_INSERT)
print(role.list_grants())
print(role.list_grant("Collection", "*"))
role.revoke("Global", "*", _PRIVILEGE_INSERT)

  • Se viene effettuata una chiamata API di autorizzazione sulla connessione Milvus, indipendentemente dal fatto che sia specificato db_name, database si riferisce al nome del database specificato nella chiamata API di autorizzazione.
db_name = "foo"
connect_to_milvus()
role.grant("Collection", "*", _PRIVILEGE_INSERT, db_name=db_name)
print(role.list_grants(db_name=db_name))
print(role.list_grant("Collection", "*", db_name=db_name))
role.revoke("Global", "*", _PRIVILEGE_INSERT, db_name=db_name)