Zarządzanie bazami danych

Podobnie jak tradycyjne silniki baz danych, w Milvus możesz tworzyć bazy danych i przydzielać uprawnienia do ich zarządzania konkretnym użytkownikom. Ci użytkownicy będą mieć wówczas uprawnienia do zarządzania kolekcjami w ramach tych baz danych. Klaster Milvus obsługuje do 64 bazy danych.

Tworzenie bazy danych

Aby stworzyć bazę danych, najpierw musisz połączyć się z klastrem Milvus i przygotować nazwę:

from pymilvus import connections, db

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

database = db.create_database("book")

Korzystanie z bazy danych

Klaster Milvus jest dostarczany z domyślną bazą danych o nazwie "default". Jeśli nie zostało to inaczej określone, kolekcje będą tworzone w domyślnej bazie danych.

Aby zmienić domyślną bazę danych, postępuj zgodnie z poniższymi krokami:

db.using_database("book")

Możesz również ustawić bazę danych do użycia podczas łączenia się z klastrem Milvus, jak pokazano poniżej:

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

Wyświetlanie baz danych

Aby wyświetlić wszystkie istniejące bazy danych w klastrze Milvus, postępuj zgodnie z poniższymi krokami:

db.list_database()

['default', 'book']

Usuwanie bazy danych

Aby usunąć bazę danych, najpierw musisz usunąć wszystkie jej kolekcje. W przeciwnym razie operacja usunięcia zakończy się niepowodzeniem.

db.drop_database("book")

db.list_database()

['default']

Korzystanie z RBAC w bazie danych

RBAC obejmuje również operacje na bazie danych i zapewnia zgodność wsteczną. W interfejsie API uprawnień (przyznawanie / cofanie / wyświetlanie przyznanych uprawnień), pojęcie bazy danych ma następujące znaczenia:

  • Jeśli zarówno połączenie Milvus, jak i wywołanie API uprawnień nie określają db_name, baza danych odnosi się do domyślnej bazy danych.
  • Jeśli połączenie Milvus określa db_name, ale kolejne wywołania API uprawnień nie, baza danych odnosi się do nazwy bazy danych określonej w połączeniu Milvus.
  • Jeśli wywołane jest wywołanie API uprawnień na połączeniu Milvus, niezależnie od określenia db_name, baza danych odnosi się do nazwy bazy danych określonej w wywołaniu API uprawnień.

Poniższy fragment kodu jest współdzielony między blokami poniżej.

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"Łączenie z Milvus\n")
    connections.connect(host=_HOST, port=_PORT, user=_ROOT, password=_ROOT_PASSWORD, db_name=db_name)

  • Jeśli zarówno połączenie Milvus, jak i wywołanie API uprawnień nie określają db_name, baza danych odnosi się do domyślnej bazy danych.
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)
  • Jeśli połączenie Milvus określa db_name, ale kolejne wywołania API uprawnień nie, baza danych odnosi się do nazwy bazy danych określonej w połączeniu 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)
  • Jeśli wywołane jest wywołanie API uprawnień na połączeniu Milvus, niezależnie od określenia db_name, baza danych odnosi się do nazwy bazy danych określonej w wywołaniu API uprawnień.
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)