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相同,额外支持返回标签属性。 |
选项 |
|
返回值 |
|
示例 | 请提前执行如下命令:
命令示例:
返回示例:
|