데이터베이스 관리

Milvus에서 전통적인 데이터베이스 엔진과 유사하게 데이터베이스를 생성하고 특정 사용자에게 권한을 할당하여 관리할 수 있습니다. 이러한 사용자는 그러한 데이터베이스 내에서 컬렉션을 관리할 수 있는 권한을 갖게 됩니다. Milvus 클러스터는 최대 64개의 데이터베이스를 지원합니다.

데이터베이스 생성

데이터베이스를 생성하기 위해서는 먼저 Milvus 클러스터에 연결하고 이름을 준비해야 합니다:

from pymilvus import connections, db

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

database = db.create_database("book")

데이터베이스 사용

Milvus 클러스터에는 "default"라는 기본 데이터베이스가 함께 제공됩니다. 별도로 지정하지 않을 경우, 컬렉션은 기본 데이터베이스에 생성됩니다.

기본 데이터베이스를 변경하려면 다음 단계를 따르세요:

db.using_database("book")

또한 Milvus 클러스터에 연결할 때 사용할 데이터베이스를 설정할 수도 있습니다:

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

데이터베이스 목록 표시

Milvus 클러스터에 있는 모든 데이터베이스를 검색하려면 다음 단계를 따르세요:

db.list_database()

['default', 'book']

데이터베이스 삭제

데이터베이스를 삭제하려면 먼저 해당 데이터베이스의 모든 컬렉션을 삭제해야 합니다. 그러지 않으면 삭제가 실패합니다.

db.drop_database("book")

db.list_database()

['default']

데이터베이스에서 RBAC 사용

RBAC는 데이터베이스 작업도 포함하며, 앞으로의 호환성을 보장합니다. 권한 API(부여/취소/부여 목록)에서 용어 데이터베이스는 다음과 같은 의미를 갖습니다:

  • Milvus 연결 및 권한 API 호출 모두 db_name을 지정하지 않으면, 데이터베이스는 기본 데이터베이스를 가리킵니다.
  • Milvus 연결이 db_name을 지정하더라도 이후의 권한 API 호출에서 db_name을 지정하지 않으면, 데이터베이스는 Milvus 연결에서 지정한 데이터베이스 이름을 가리킵니다.
  • 권한 API 호출이 Milvus 연결에서 이루어지더라도 db_name이 지정되었는지 여부에 관계없이, 데이터베이스는 권한 API 호출에서 지정한 데이터베이스 이름을 가리킵니다.

아래 코드 스니펫은 아래 블록들 간에 공유됩니다.

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"Milvus에 연결 중\n")
    connections.connect(host=_HOST, port=_PORT, user=_ROOT, password=_ROOT_PASSWORD, db_name=db_name)

  • Milvus 연결 및 권한 API 호출 모두 db_name을 지정하지 않으면, 데이터베이스는 기본 데이터베이스를 가리킵니다.
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)

  • Milvus 연결이 db_name을 지정하더라도 이후의 권한 API 호출에서 db_name을 지정하지 않으면, 데이터베이스는 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)

  • 권한 API 호출이 Milvus 연결에서 이루어지더라도 db_name이 지정되었는지 여부에 관계없이, 데이터베이스는 권한 API 호출에서 지정한 데이터베이스 이름을 가리킵니다.
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)