データベースの管理

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)