TairVector针对集群架构代理模式,在数据索引(TairVectorIndex)的基础上推出了全局索引(TairVectorGlobalIndex)。
概述
当全局索引与数据索引建立关联关系后,全局索引可以自动实现负载均衡。您仅需向全局索引中写入数据,Tair会将数据均匀地写至集群不同分片的数据索引中。查询时,全局索引也将自动汇聚各个数据索引中的查询结果,并返回最终结果。全局索引的数据结构如下所示:
在创建全局索引后,您可以使用TVS.EXPANDINDEXGLOBAL接口直接创建对应的数据索引;或者您也可以通过TVS.IMPORTINDEXGLOBAL接口绑定存量数据索引(通过TVS.CREATEINDEX接口创建、元数据信息与全局索引一致),使数据索引与全局索引建立关联关系。关联后,您仅需对全局索引进行操作即可。
同时,也支持解除数据索引与全局索引之间的关联关系。
前提条件
注意事项
-
通常情况下,执行TVS.CREATEINDEXGLOBAL、TVS.EXPANDINDEXGLOBAL、TVS.IMPORTINDEXGLOBAL接口后全局索引会立即生效,但可能会因为网络延迟、后台同步等原因导致没有立即生效,最长生效时间不会超过30s。
-
请勿在未解绑前直接删除数据索引,否则会报错
ERR there are vector indexes that don't exist, please check and retry。
命令列表
表 1. TairVector全局索引命令
|
类型 |
命令 |
语法 |
说明 |
|
索引操作 |
|
创建一个全局索引,同时指定构建索引和查询的具体算法,以及距离函数。 |
|
|
|
在全局索引中创建数据索引。 |
||
|
|
绑定存量数据索引至全局索引中,存量数据索引的元数据信息需与全局索引一致。 |
||
|
|
查询全局索引信息。 |
||
|
|
解绑全量索引与数据索引的关系。若不指定数据索引,则直接删除该全量索引,同时解除所有相关的数据索引的关联关系。 |
||
|
向量数据操作 |
|
往全局索引中插入数据记录(Key),Tair会自动把Key写到合适的数据索引中,实现数据均衡。 |
|
|
|
查询全局索引中key对应的所有数据记录。 |
||
|
|
查询指定向量索引的key中对应的attribute_key所对应的数值。 |
||
|
|
在全量索引中,删除指定数据记录(key)。 |
||
|
|
在全量索引的数据记录(key)中,删除指定的attribute_key与其数值。 |
||
|
|
在全局索引中,扫描符合条件的数据记录(key)。 |
||
|
向量近邻查询 |
|
在全局索引中,对指定的向量(VECTOR)进行近邻查询,最多可返回topN条。 |
|
|
|
在全局索引中,对指定的向量(VECTOR)进行近邻查询,检索逻辑与TVS.KNNSEARCHGLOBAL相同,额外支持返回标签属性。 |
本文的命令语法定义如下:
大写关键字:命令关键字。斜体:变量。[options]:可选参数,不在括号中的参数为必选。A|B:该组参数互斥,请进行二选一或多选一。...:前面的内容可重复。
TVS.CREATEINDEXGLOBAL
|
类别 |
说明 |
|
语法 |
|
|
时间复杂度 |
O(1) |
|
命令描述 |
创建一个全局索引,同时指定构建索引和查询的具体算法,以及距离函数。 该对象仅能通过TVS.DELINDEXGLOBAL命令删除。 |
|
选项 |
|
|
返回值 |
|
|
示例 |
命令示例:
返回示例均为如下:
|
TVS.EXPANDINDEXGLOBAL
|
类别 |
说明 |
|
语法 |
|
|
时间复杂度 |
O(1) |
|
命令描述 |
在全局索引中创建数据索引。 当您在本接口指定新建的数量时,Tair会自动、均衡地将数据索引创建在不同的分片中,并且自动命名。数据索引的元数据信息与全局索引相同,并且与全局索引存在关联关系,同时,数据索引也独立存储在Tair中。 说明
建议每个全局索引中的数据索引数量等于分片数。例如Tair实例为3分片,在本接口中指定创建3个数据索引时,Tair会在每个分片中各创建一个数据索引,自动实现负载均衡。 |
|
选项 |
|
|
返回值 |
|
|
示例 |
命令示例:
返回示例均为如下:
|
TVS.IMPORTINDEXGLOBAL
|
类别 |
说明 |
|
语法 |
|
|
时间复杂度 |
O(1) |
|
命令描述 |
绑定存量数据索引至全局索引中,存量数据索引的元数据信息需与全局索引一致。 |
|
选项 |
|
|
返回值 |
|
|
示例 |
命令示例:
返回示例均为如下:
|
TVS.LISTINDEXGLOBAL
|
类别 |
说明 |
|
语法 |
|
|
时间复杂度 |
O(1) |
|
命令描述 |
查询全局索引信息。 |
|
选项 |
|
|
返回值 |
|
|
示例 |
命令示例:
返回示例均为如下:
|
TVS.DELINDEXGLOBAL
|
类别 |
说明 |
|
语法 |
|
|
时间复杂度 |
O(1) |
|
命令描述 |
解绑全量索引与数据索引的关系。若不指定数据索引,则直接删除该全量索引,同时解除所有相关的数据索引的关联关系。 说明
本接口不会删除数据索引,如需删除请使用TVS.DELINDEX接口。 |
|
选项 |
|
|
返回值 |
|
|
示例 |
命令示例:
返回示例均为如下:
|
TVS.HSETGLOBAL
|
类别 |
说明 |
|
语法 |
|
|
时间复杂度 |
若本次插入、更新数据无需创建或更新向量值,则时间复杂度为O(1);否则时间复杂度为O(log(N)),N为该向量索引中Key的数量。 |
|
命令描述 |
往全局索引中插入数据记录(Key),Tair会自动把Key写到合适的数据索引中,实现数据均衡。 若该记录已存在则更新并覆盖原记录。 |
|
选项 |
|
|
返回值 |
|
|
示例 |
命令示例:
返回示例:
|
TVS.HGETALLGLOBAL
|
类别 |
说明 |
|
语法 |
|
|
时间复杂度 |
O(1)*M,M为数据索引的数量。 |
|
命令描述 |
查询全局索引中key对应的所有数据记录。 |
|
选项 |
|
|
返回值 |
|
|
示例 |
命令示例:
返回示例:
|
TVS.HMGETGLOBAL
|
类别 |
说明 |
|
语法 |
|
|
时间复杂度 |
O(1)*M,M为数据索引的数量。 |
|
命令描述 |
查询指定向量索引的key中对应的attribute_key所对应的数值。 |
|
选项 |
|
|
返回值 |
|
|
示例 |
命令示例:
返回示例:
|
TVS.DELGLOBAL
|
类别 |
说明 |
|
语法 |
|
|
时间复杂度 |
O(1) |
|
命令描述 |
在全量索引中,删除指定数据记录(key)。 |
|
选项 |
|
|
返回值 |
|
|
示例 |
命令示例:
返回示例:
|
TVS.HDELGLOBAL
|
类别 |
说明 |
|
语法 |
|
|
时间复杂度 |
O(1) |
|
命令描述 |
在全量索引的数据记录(key)中,删除指定的attribute_key与其数值。 |
|
选项 |
|
|
返回值 |
|
|
示例 |
命令示例:
返回示例:
|
TVS.SCANGLOBAL
|
类别 |
说明 |
|
语法 |
|
|
时间复杂度 |
O(N),N为数据索引中Key的数量。 |
|
命令描述 |
在全局索引中,扫描符合条件的数据记录(key)。 Tair单次扫描仅会返回单个数据分片的结果。 |
|
选项 |
|
|
返回值 |
|
|
示例 |
命令示例:
返回示例:
|
TVS.KNNSEARCHGLOBAL
|
类别 |
说明 |
|
语法 |
|
|
时间复杂度 |
N为数据索引中Key的数量,M为数据索引的数量。 |
|
命令描述 |
在全局索引中,对指定的向量(VECTOR)进行近邻查询,最多可返回topN条。 例如您希望查询topN条结果时,Tair会先从各个数据索引中分别检索出topN条结果,此时最多可能存在 |
|
选项 |
|
|
返回值 |
|
|
示例 |
请提前执行如下命令:
命令示例1:
返回示例1:
命令示例2:
返回示例2:
|
TVS.KNNSEARCHFIELDGLOBAL
|
类别 |
说明 |
|
语法 |
|
|
时间复杂度 |
N为数据索引中Key的数量,M为数据索引的数量。 |
|
命令描述 |
在全局索引中,对指定的向量(VECTOR)进行近邻查询,检索逻辑与TVS.KNNSEARCHGLOBAL相同,额外支持返回标签属性。 |
|
选项 |
|
|
返回值 |
|
|
示例 |
请提前执行如下命令:
命令示例:
返回示例:
|