Milvus(6):Collection 管理分区、管理别名

发布于:2025-05-01 ⋅ 阅读:(19) ⋅ 点赞:(0)

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 MilvusClient

client = 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 MilvusClient

client = 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"
)

网站公告

今日签到

点亮在社区的每一天
去签到