데이터베이스 관리
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)