跳到主要内容
版本:v3.0.x

Database

Milvus 在 Collection 之上引入了一个 数据库 层,为管理和组织数据提供了一种更有效的方式,同时支持多租户。

什么是 Database

在 Milvus 中,数据库是组织和管理数据的逻辑单元。为了提高数据安全性并实现多租户,你可以创建多个数据库,为不同的应用程序或租户从逻辑上隔离数据。例如,创建一个数据库用于存储用户 A 的数据,另一个数据库用于存储用户 B 的数据。

创建 Database

您可以使用 Milvus RESTful API 或 SDK 以编程方式创建数据库。

Python
from pymilvus import MilvusClient

client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)

client.create_database(
db_name="my_database_1"
)

您还可以在创建数据库时为其设置属性。下面的示例设置了数据库的副本数量。

Python
client.create_database(
db_name="my_database_2",
properties={
"database.replica.number": 3
}
)

查看 Database

您可以使用 Milvus RESTful API 或 SDK 列出所有现有数据库并查看其详细信息。

Python
# List all existing databases
client.list_databases()

# Output
# ['default', 'my_database_1', 'my_database_2']

# Check database details
client.describe_database(
db_name="default"
)

# Output
# {"name": "default"}

管理 Database 属性

每个数据库都有自己的属性,您可以在 创建数据库 时设置数据库属性(如 创建数据库 中所述),也可以更改和删除任何现有数据库的属性。

下表列出了可能的数据库属性。

属性名称

类型

属性描述

database.replica.number

integer

指定数据库的副本数量。

database.resource_groups

string

以逗号分隔的列表形式列出的与指定数据库相关的资源组名称。

database.diskQuota.mb

integer

指定数据库的最大磁盘空间大小(MB)。

database.max.collections

integer

指定数据库中允许的最大 Collection 数量。

database.force.deny.writing

boolean

是否强制指定的数据库拒绝写操作。

database.force.deny.reading

boolean

是否强制指定的数据库拒绝读取操作。

timezone

string

指定应用于数据库内时间敏感操作的默认时区,尤其是 TIMESTAMPTZ 字段。除非设置了 Collection 级时区,否则 Collection 将继承数据库时区。查询级时区参数可暂时覆盖数据库和 Collection 的默认时区。该值必须是有效的IANA 时区标识符(例如,Asia/ShanghaiAmerica/ChicagoUTC)。有关如何使用 TIMESTAMPTZ 字段的详细信息,请参阅TIMESTAMPTZ 字段

更改 Database 属性

您可以按以下方式更改现有数据库的属性。下面的示例限制了您可以在数据库中创建的 Collection 数量。

Python
client.alter_database_properties(
db_name="my_database_1",
properties={
"database.max.collections": 10
}
)

删除 Database 属性

您还可以通过如下方式删除数据库属性来重置该属性。下面的示例删除了可以在数据库中创建的 Collection 数量限制。

Python
client.drop_database_properties(
db_name="my_database_1",
property_keys=[
"database.max.collections"
]
)

使用 Database

你可以在不断开与 Milvus 连接的情况下从一个数据库切换到另一个数据库。

说明

RESTful API 不支持此操作。

Python
client.use_database(
db_name="my_database_2"
)

删除 Database

一旦不再需要数据库,就可以删除数据库。请注意

  • 不能丢弃默认数据库。

  • 在删除数据库之前,需要先删除数据库中的所有 Collection。

你可以使用 Milvus RESTful API 或 SDK 以编程方式删除数据库。

Python
client.drop_database(
db_name="my_database_2"
)

常见问题

如何管理 Database 的权限?

Milvus 使用基于角色的访问控制(RBAC)来管理权限。您可以创建具有特定权限的角色,并将其分配给用户,从而控制他们对不同数据库的访问。有关详细信息,请参阅 RBAC 文档

Database 有配额限制吗?

是的,Milvus 允许您为数据库设置配额限制,如 Collection 的最大数量。有关限制的全面列表,请参阅 Milvus 限制文档