Database
Zilliz Cloud 在集群和 Collection 之间引入了一层 Database,可帮助您更高效地组织和管理数据,同时满足您的多租需求。
什么是 Database
在 Zilliz Cloud 中,Database 是用于组织和管理数据的逻辑单元。为了增强数据安全并实现多租,您可以创建多个 Database,从逻辑上将不同应用和不同租户的数据隔离开来。例如,您可以针对两名不同用户的数据创建不同的 Database。
下图展示了 Zilliz Cloud 资源层级的架构。
通过上图可以看到,仅 Dedicated 集群下有 Database 层。 Serverless 和 Free 集群下无 Database 层。
前提条件
您需要具备组织管理员或项目管理员权限。
创建 Database
仅 Dedicated 集群支持创建 Database。在您创建 Dedicated 集群的同时,Zilliz Cloud 会为您在集群下自动创建一个 Default Database。
每个 Dedicated 集群中最多可创建 1024 个 Database。您可以选择通过控制台或编程的方式创建 Database。
在控制台中创建 Database
您可以按照如下图所示的方式创建 Database。
您也可以将创建好的 Collection 从一个 Database 移动到另一个 Database 中。更多详情,请参考管理 Collection (控制台)。
使用 SDK 创建 Database
您可以使用 RESTful API 或 SDK 创建 Database。
- Python
- Java
- NodeJS
- Go
- cURL
from pymilvus import MilvusClient
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)
client.create_database(
db_name="my_database_1"
)
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.service.database.request.*;
ConnectConfig config = ConnectConfig.builder()
.uri("YOUR_CLUSTER_ENDPOINT")
.token("YOUR_CLUSTER_TOKEN")
.build();
MilvusClientV2 client = new MilvusClientV2(config);
CreateDatabaseReq createDatabaseReq = CreateDatabaseReq.builder()
.databaseName("my_database_1")
.build();
client.createDatabase(createDatabaseReq);
import {MilvusClient} from '@zilliz/milvus2-sdk-node';
const client = new MilvusClient({
address: "YOUR_CLUSTER_ENDPOINT",
token: 'YOUR_CLUSTER_TOKEN'
});
await client.createDatabase({
db_name: "my_database_1"
});
// TODO
export CLUSTER_ENDPOINT="YOUR_CLUSTER_ENDPOINT"
export TOKEN="YOUR_CLUSTER_TOKEN"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/create" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"dbName": "my_database_1"
}'
您还可以在创建 Database 时为其指定相应属性。如下示例中演示了如何在创建 Database 时设置副本数量。
- Python
- Java
- NodeJS
- Go
- cURL
client.create_database(
db_name="my_database_2",
properties={
"database.replica.number": 3
}
)
Map<String, String> properties = new HashMap<>();
properties.put("database.replica.number", "3");
CreateDatabaseReq createDatabaseReq = CreateDatabaseReq.builder()
.databaseName("my_database_2")
.properties(properties)
.build();
client.createDatabase(createDatabaseReq);
// TODO
// TODO
export CLUSTER_ENDPOINT="YOUR_CLUSTER_ENDPOINT"
export TOKEN="YOUR_CLUSTER_TOKEN"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/create" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"dbName": "my_database_2",
"properties": {
"database.replica.number": 3
}
}'
查看 Database
您可以使用 RESTful API 或 SDK 查看所有已创建的 Database 及其详情。
- Python
- Java
- NodeJS
- Go
- cURL
# 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"}
import io.milvus.v2.service.database.response.*;
ListDatabasesResp listDatabasesResp = client.listDatabases();
DescribeDatabaseResp descDBResp = client.describeDatabase(DescribeDatabaseReq.builder()
.databaseName("default")
.build());
await client.describeDatabase({
db_name: 'default'
});
// TODO
export CLUSTER_ENDPOINT="YOUR_CLUSTER_ENDPOINT"
export TOKEN="YOUR_CLUSTER_TOKEN"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/describe" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"dbName": "default"
}'
管理 Database 属性
每个 Database 都有若干属性供您设置。您可以选择在创建 Database 时设置这些属性或者修改已创建的 Database 的属性。
下表展示了当前支持设置的 Database 属性。
属性名称 | 值类型 | 属性描述 |
---|---|---|
| integer | 指定 Database 的副本数量。 |
| integer | 指定 Database 中可以创建的 Collection 的最大数量。 |
| boolean | 当前 Database 是否强制不可写。 |
| boolean | 当前 Database 是否强制不可读。 |
修改 Database 属性
您可以参考如下示例修改指定 Database 的上述属性。如下示例演示了如何限制指定 Database 中可以创建的 Collection 数量。
- Python
- Java
- NodeJS
- Go
- cURL
client.alter_database_properties(
db_name: "my_database_1",
properties: {
"database.max.collections": 10
}
)
client.alterDatabaseProperties(AlterDatabasePropertiesReq.builder()
.databaseName("my_database_1")
.property("database.max.collections", "10")
.build());
await milvusClient.alterDatabaseProperties({
db_name: "my_database_1",
properties: {"database.max.collections", "10" },
})
// TODO
export CLUSTER_ENDPOINT="YOUR_CLUSTER_ENDPOINT"
export TOKEN="YOUR_CLUSTER_TOKEN"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/alter" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"dbName": "my_database",
"properties": {
"database.max.collections": 10
}
}'
重置 Database 属性
您还可以参考如下示例重置 Database 某个属性的设置。如下示例演示了如何移除指定 Database 中可创建的 Collection 数量限制。
- Python
- Java
- NodeJS
- Go
- cURL
client.drop_database_properties(
db_name: "my_database_1",
property_keys: [
"database.max.collections"
]
)
client.dropDatabaseProperties(DropDatabasePropertiesReq.builder()
.databaseName("my_database_1")
.propertyKeys(Collections.singletonList("database.max.collections"))
.build());
await milvusClient.dropDatabaseProperties({
db_name: my_database_1,
properties: ["database.max.collections"],
});
// TODO
export CLUSTER_ENDPOINT="YOUR_CLUSTER_ENDPOINT"
export TOKEN="YOUR_CLUSTER_TOKEN"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/alter" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"dbName": "my_database",
"propertyKeys": [
"database.max.collections"
]
}'
删除 Database
当某个 Database 不再需要时,您可以选择删除该 Database。需要注意的是:
-
默认的 Database 无法删除。
-
在删除 Database 前,请删除 Database 中的所有 Collection。
在控制台中删除 Database
您可以参考下图中的步骤通过控制台删除 Database。
使用 SDK 删除 Database
您也可以使用 RESTful API 或 SDK 来删除 Database。
- Python
- Java
- NodeJS
- Go
- cURL
client.drop_database(
db_name="my_database_2"
)
client.dropDatabase(DropDatabaseReq.builder()
.databaseName("my_database_2")
.build());
await milvusClient.dropDatabase({
db_name: "my_database_2",
});
// TODO
export CLUSTER_ENDPOINT="YOUR_CLUSTER_ENDPOINT"
export TOKEN="YOUR_CLUSTER_TOKEN"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/databases/drop" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"dbName": "my_database"
}'