Milvus(6):Collection 管理分区、管理别名
1 管理分区
分区是一个 Collection 的子集。每个分区与其父集合共享相同的数据结构,但只包含集合中的一个数据子集。本页将帮助你了解如何管理分区。
1.1 分区概述
创建一个 Collection 时,Milvus 也会在该 Collection 中创建一个名为_default 的分区。如果不添加其他分区,所有插入到 Collections 中的实体都会进入默认分区,所有搜索和查询也都在默认分区内进行。可以添加更多分区,并根据特定条件将实体插入其中。这样就可以限制在某些分区内进行搜索和查询,从而提高搜索性能。一个 Collections 最多可以有 1,024 个分区。
Partition Key功能是基于分区的搜索优化,允许 Milvus 根据特定标量字段中的值将实体分配到不同的分区中。该功能有助于实现面向分区的多租户,并提高搜索性能。
1.2 列出分区
创建 Collections 时,Milvus 还会在该 Collections 中创建一个名为_default 的分区。您可以按以下方式列出 Collections 中的分区。
from pymilvus import MilvusClientclient = MilvusClient(uri="http://localhost:19530",token="root:Milvus"
)res = client.list_partitions(collection_name="my_collection"
)print(res)# Output
#
# ["_default"]
1.3 创建分区
可以向 Collection 添加更多分区,并根据特定条件向这些分区插入实体。
client.create_partition(collection_name="my_collection",partition_name="partitionA"
)res = client.list_partitions(collection_name="my_collection"
)print(res)# Output
#
# ["_default", "partitionA"]
1.4 检查特定分区
以下代码片段演示了如何检查特定 Collections 中是否存在分区。
res = client.has_partition(collection_name="my_collection",partition_name="partitionA"
)print(res)# Output
#
# True
1.5 加载和释放分区
可以分别加载集合中的特定分区。值得注意的是,如果集合中存在未加载的分区,则集合的加载状态会保持未加载状态。
client.load_partitions(collection_name="my_collection",partition_names=["partitionA"]
)res = client.get_load_state(collection_name="my_collection",partition_name="partitionA"
)print(res)
# Output
#
# {
# "state": "<LoadState: Loaded>"
# }
还可以释放特定分区。
client.release_partitions(collection_name="my_collection",partition_names=["partitionA"]
)res = client.get_load_state(collection_name="my_collection",partition_name="partitionA"
)print(res)# Output
#
# {
# "state": "<LoadState: NotLoaded>"
# }
1.6 删除分区
可以丢弃不再需要的分区。在丢弃分区之前,请确保该分区已被释放。
client.release_partitions(collection_name="my_collection",partition_names=["partitionA"]
)client.drop_partition(collection_name="my_collection",partition_name="partitionA"
)res = client.list_partitions(collection_name="my_collection"
)print(res)# ["_default"]
2 管理别名
2.1 别名概述
可以为你的 Collections 创建别名。一个集合可以有多个别名,但集合不能共享一个别名。在收到针对某个 Collection 的请求时,Milvus 会根据提供的名称定位该 Collection。如果所提供名称的 Collection 不存在,Milvus 会继续定位所提供名称的别名。你可以使用 Collections 别名来调整代码,以适应不同的情况。
2.2 创建别名
以下代码片段演示了如何为 Collection 创建别名。
from pymilvus import MilvusClientclient = MilvusClient(uri="http://localhost:19530",token="root:Milvus"
)# 9. 管理别名
# 9.1. 创建别名
client.create_alias(collection_name="my_collection_1",alias="bob"
)client.create_alias(collection_name="my_collection_1",alias="alice"
)
以下代码片段演示了列出分配给特定 Collection 的别名的过程。
# 9.2. 别名列表
res = client.list_aliases(collection_name="my_collection_1"
)print(res)# Output
#
# {
# "aliases": [
# "bob",
# "alice"
# ],
# "collection_name": "my_collection_1",
# "db_name": "default"
# }
2.3 描述别名
以下代码片段详细描述了特定别名,包括分配给该别名的 Collections 名称。
# 9.3. 描述的别名
res = client.describe_alias(alias="bob"
)print(res)# Output
#
# {
# "alias": "bob",
# "collection_name": "my_collection_1",
# "db_name": "default"
# }
2.4 更改别名
可以将已分配给特定集合的别名重新分配给另一个集合。
# 9.4 为其他集合重新分配别名
client.alter_alias(collection_name="my_collection_2",alias="alice"
)res = client.list_aliases(collection_name="my_collection_2"
)print(res)# Output
#
# {
# "aliases": [
# "alice"
# ],
# "collection_name": "my_collection_2",
# "db_name": "default"
# }res = client.list_aliases(collection_name="my_collection_1"
)print(res)# Output
#
# {
# "aliases": [
# "bob"
# ],
# "collection_name": "my_collection_1",
# "db_name": "default"
# }
2.5 删除别名
下面的代码片段演示了删除别名的过程。
# 9.5 删除别名
client.drop_alias(alias="bob"
)client.drop_alias(alias="alice"
)