データベースの管理
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(Grant/Revoke/List Grant)において、データベースという用語は以下の意味を持ちます:
- 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)