跳到主要内容
版本:v2.6.x

管理别名

在 Milvus 中,别名是一个 Collection 的二级可变名称。使用别名提供了一个抽象层,使您可以在不修改应用程序代码的情况下动态切换 Collection。这对于生产环境中的无缝数据更新、A/B 测试和其他操作符特别有用。

本页演示了如何创建、列出、重新分配和删除 Collection 别名。

为什么使用别名?

使用别名的主要好处是将客户端应用程序与特定的物理 Collection 名称分离。

想象一下,你有一个实时应用程序,它查询一个名为prod_data 的 Collection。当您需要更新底层数据时,可以在不中断服务的情况下执行更新。工作流程如下

  1. 创建一个新 Collection:创建一个新的 Collection,例如prod_data_v2
  2. 准备数据:在prod_data_v2 中加载新数据并编制索引。
  3. 切换别名:一旦新的 Collection 准备就绪,原子式地将旧 Collection 的别名prod_data 重新分配给prod_data_v2

您的应用程序将继续向别名prod_data 发送请求,不会出现停机。这种机制可以实现无缝更新,并简化向量搜索服务的蓝绿部署等操作符。

别名的关键属性:

  • 一个 Collection 可以有多个别名。
  • 一个别名一次只能指向一个 Collection。
  • 处理请求时,Milvus 会首先检查是否存在具有所提供名称的 Collection。如果不存在,它就会检查该名称是否是某个 Collection 的别名。

创建别名

下面的代码片段演示了如何为 Collection 创建别名。

from pymilvus import MilvusClient

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

# 9. Manage aliases
# 9.1. Create aliases
client.create_alias(
collection_name="my_collection_1",
alias="bob"
)

client.create_alias(
collection_name="my_collection_1",
alias="alice"
)

列出别名

以下代码片段演示了列出分配给特定 Collection 的别名的过程。

# 9.2. List aliases
res = client.list_aliases(
collection_name="my_collection_1"
)

print(res)

# Output
#
# {
# "aliases": [
# "bob",
# "alice"
# ],
# "collection_name": "my_collection_1",
# "db_name": "default"
# }

描述别名

以下代码片段详细描述了特定别名,包括分配给该别名的 Collection 名称。

# 9.3. Describe aliases
res = client.describe_alias(
alias="bob"
)

print(res)

# Output
#
# {
# "alias": "bob",
# "collection_name": "my_collection_1",
# "db_name": "default"
# }

更改别名

您可以将已分配给特定 Collection 的别名重新分配给另一个 Collection。

# 9.4 Reassign aliases to other collections
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"
# }

删除别名

下面的代码片段演示了删除别名的过程。

# 9.5 Drop aliases
client.drop_alias(
alias="bob"
)

client.drop_alias(
alias="alice"
)