分区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
# 创立Client
client = dashvector.Client(
api_key='YOUR_API_KEY',
endpoint='YOUR_CLUSTER_ENDPOINT'
)
assert client
# 创立Collection
client.create(name='understand_partition', dimension=4)
collection = client.get('understand_partition')
assert collection
# 创立Partition,Partition称号为shoes
collection.create_partition(name='shoes')
# 描绘Partition
ret = collection.describe_partition('shoes')
print(ret)
# 检查Partition列表
partitions = collection.list_partitions()
print(partitions)
# 刺进Doc至Partition
collection.insert(
('1', [0.1,0.1,0.1,0.1]), partition='shoes'
)
# 向量类似性检索时指定Partition
docs = collection.query(
vector=[0.1, 0.1, 0.2, 0.1],
partition='shoes'
)
print(docs)
# 从指定Partition中删去Doc
collection.delete(ids=['1'], partition='shoes')
# 检查Partition统计数据
ret = collection.stats_partition('shoes')
print(ret)
# 删去Partition
collection.delete_partition('shoes')