写点什么

分区 Partition

作者:DashVector
  • 2024-11-14
    陕西
  • 本文字数:1690 字

    阅读完需:约 6 分钟

分区Partition

理解 Partition

向量检索服务 DashVector 的 Collection 具有分区(Partition)的能力,同一个 Collection 下的 Doc 可通过不同的 Partition 进行物理和逻辑上的分区。各种 Doc 操作(如插入 Doc、检索 Doc 等。若指定 Partition,则该操作将限定在该指定的 Paritition 内进行。通过合理的 Partition 设置,可有效提升 Doc 操作的效率。


  • 同一个 Collection 下,可以创建若干个 Partition,具体限制见约束与限制

  • 每个 Partition 通过唯一的名称进行标识,同一个 Collection 下的 Partition 名称不可重复;

  • 同一个 Collection 下的所有 Partition,具有相同的 Schema,如向量维度、向量数据类型、度量方式、Fields 定义等;

  • 每个 Collection 默认自带一个无法删除的 Partition,当各种 Doc 操作(如插入 Doc、检索 Doc 等,不指定 Partition 时,等价于使用该默认 Partition;

  • Partition 需通过 API 调用显示的创建和删除。

Partition 使用场景举例

在 Collection 中使用 Partition 能显著提高 Query 的性能,但并非所有场景都建议使用。当数据量较小时,使用 Partition 收益不明显。当数据量较大、但没有合适的划分字段时,同样不建议使用 Partition。例如,如果没有合适的划分字段但又设置了多个 Partition 时,检索时可能需要跨多个 Partition 进行多次 Query,检索性能将低于单个 Partition 的一次 Query。


下面列举几个典型的适合 Partition 场景供参考。

电商图搜场景

例如某跨境电商用户,有 2000w 服装商品图片,需要实现以图搜图业务场景。商品有固定多个分类(鞋子,裙子,裤子等),商品提特征后按类别入库,每个分类对应一个 Partition,查询时用户显示指定类别或用户不指定由分类模型确定类别。


视频监控场景

例如某视频监控厂商,需要对一工业园区的 1000 个摄像头采集的视频进行抽帧,识别提取车辆特征后,导入 DashVector 向量库用于后续搜索,生成车辆轨迹等业务场景,但数据只需保留 30 天,按日期每天创建 Partition,并定期删除过期的 Partition。


商标侵权检测

例如某商标代理商收集了一个 5000w 规模的商标数据库,需要快速查询相似商标判定是否侵权。按结构分为文本商标、图形商标、数字商标、字母商标等 9 个分类,每个分类数据入库 DashVector 时对应一个 Partition。查询时指定 Partition,只从特定类别中查询。

多语言问答系统

某电商国际化知识库团队,需要根据用户所使用的语言类别来查询对应语言的相似问题,比如要支持中文、英文、法文三种语言。在知识库内容经过 Embedding 后,分别导入 Chinese、English、French 三个 Partition 中,查询时,根据用户所使用的语言类别选择对应的 Partition 进行查询。

多租户

Partition 也可用来支持多租户场景。例如某电商服务商为其下小微电商提供以图搜图能力,可在一个 Collection 中创建多个 Partition 对应多个客户,实现了数据的物理隔离、保证安全的同时,又节约了成本。

Partition 使用示例

前提条件

  • 已创建 Cluster

  • 已获得 API-KEY

  • 已安装最新版 SDK

代码示例

说明


需要使用您的 api-key 替换示例中的 YOUR_API_KEY、您的 Cluster Endpoint 替换示例中的 YOUR_CLUSTER_ENDPOINT,代码才能正常运行。


import dashvector
# 创建Clientclient = dashvector.Client( api_key='YOUR_API_KEY', endpoint='YOUR_CLUSTER_ENDPOINT')assert client
# 创建Collectionclient.create(name='understand_partition', dimension=4)collection = client.get('understand_partition')assert collection

# 创建Partition,Partition名称为shoescollection.create_partition(name='shoes')
# 描述Partitionret = collection.describe_partition('shoes')print(ret)
# 查看Partition列表partitions = collection.list_partitions()print(partitions)
# 插入Doc至Partitioncollection.insert( ('1', [0.1,0.1,0.1,0.1]), partition='shoes')
# 向量相似性检索时指定Partitiondocs = collection.query( vector=[0.1, 0.1, 0.2, 0.1], partition='shoes')print(docs)
# 从指定Partition中删除Doccollection.delete(ids=['1'], partition='shoes')
# 查看Partition统计数据ret = collection.stats_partition('shoes')print(ret)
# 删除Partitioncollection.delete_partition('shoes')
复制代码


发布于: 刚刚阅读数: 4
用户头像

DashVector

关注

还未添加个人签名 2024-05-14 加入

向量检索服务DashVector基于通义实验室自研的高效向量引擎Proxima内核,提供具备水平拓展能力的云原生、全托管的向量检索服务。

评论

发布
暂无评论
分区Partition_人工智能_DashVector_InfoQ写作社区