表空间操作¶
http://master_server代表master服务,$db_name是创建的库名, $space_name是创建的表空间名
创建表空间¶
curl -XPUT -H "content-type: application/json" -d'
{
"name": "space1",
"partition_num": 1,
"replica_num": 1,
"engine": {
"name": "gamma",
"index_size": 70000,
"max_size": 10000000,
"id_type": "String",
"retrieval_type": "IVFPQ",
"retrieval_param": {
"metric_type": "InnerProduct",
"ncentroids": 256,
"nsubvector": 32
}
},
"properties": {
"field1": {
"type": "keyword"
},
"field2": {
"type": "integer"
},
"field3": {
"type": "float",
"index": true
},
"field4": {
"type": "string",
"array": true,
"index": true
},
"field5": {
"type": "integer",
"array": false,
"index": true
},
"field6": {
"type": "vector",
"dimension": 128
},
"field7": {
"type": "vector",
"dimension": 256,
"store_type": "MemoryOnly",
"store_param": {
}
}
}
}
' http://master_server/space/$db_name/_create
参数说明:
字段标识 | 字段名称 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
name | 空间名称 | string | 是 | |
partition_num | 分片数量 | int | 是 | |
replica_num | 副本数量 | int | 是 | |
engine | 引擎配置 | json | 是 | 引擎配置 |
properties | 空间配置 | json | 是 | 定义表字段及类型 |
1、name 不能为空,不能以数字或下划线开头,尽量不使用特殊字符等。
2、partition_num 指定表空间数据分片数量,不同的分片可分布在不同的机器,来避免单台机器的资源限制。
3、replica_num 副本数量,建议设置成3,表示每个分片数据有两个备份,保证数据高可用。
engine配置:
字段标识 | 字段名称 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
name | 引擎名称 | string | 是 | 目前固定为gamma |
index_size | 分片索引阀值 | int | 否 | |
max_size | 分片最大记录数量 | int | 否 | |
id_type | 唯一主键类型 | string | 否 | |
retrieval_type | 检索模型 | string | 是 | |
retrieval_param | 检索模型参数配置 | json | 是 |
1、name 不能为空,不能以数字或下划线开头,尽量不使用特殊字符等。
2、index_size 指定每个分片的记录数量达到多少开始创建索引,不指定则不创建索引。
3、max_size 指定每个分片最多存储的记录数量,防止服务器内存占用过多。
4、id_type 指定唯一记录主键类型,支持String和Long(定义为Long可节省内存占用)。
5、retrieval_type 检索模型,目前支持五种类型,IVFPQ,GPU,BINARYIVF, HNSW,FLAT, IVFFLAT 不同的检索模型需要的参数配置及默认值如下:
IVFPQ:
字段标识 | 字段名称 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
metric_type | 计算类型 | string | 是 | 内积:InnerProduct, 欧氏距离:L2 |
ncentroids | 聚类中心数量 | int | 否 | 默认256 |
nsubvector | PQ拆分子向量大小 | int | 否 | 默认64, 值为4的倍数 |
nbits_per_idx | 子类bit位数 | int | 否 | 默认8 |
GPU:
字段标识 | 字段名称 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
metric_type | 计算类型 | string | 是 | 内积:InnerProduct, 欧氏距离:L2 |
ncentroids | 聚类中心数量 | int | 否 | 默认256 |
nsubvector | PQ拆分子向量大小 | int | 否 | 默认64, 值为4的倍数 |
nbits_per_idx | 子类bit位数 | int | 否 | 默认8 |
BINARYIVF:
字段标识 | 字段名称 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
ncentroids | 聚类中心数量 | int | 否 | 默认256 |
nprobe | 查询聚类中心桶数量 | int | 否 | 默认20, 需小于ncentroids值 |
HNSW:
字段标识 | 字段名称 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
metric_type | 计算类型 | string | 是 | 内积:InnerProduct, 欧氏距离:L2 |
nlinks | int | 否 | 默认32 | |
efConstruction | int | 否 | 默认40 | |
efSearch | int | 否 | 默认64 |
FLAT:
字段标识 | 字段名称 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
metric_type | 计算类型 | string | 是 | 内积:InnerProduct, 欧氏距离:L2 |
IVFFLAT:
字段标识 | 字段名称 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
metric_type | 计算类型 | string | 是 | 内积:InnerProduct, 欧氏距离:L2 |
ncentroids | 聚类中心数量 | int | 否 | 默认256 |
properties配置:
1、表空间结构定义字段支持的类型(即type的值)有4种: keyword,integer,float,vector(keyword等价于string)。
2、keyword类型的字段支持index、array属性,index定义是否创建索引,array指定是否允许多个值。
3、integer,float类型的字段支持index属性,index设为true的字段支持使用数值范围过滤查询。
4、vector 类型字段为特征字段,一个表空间中支持多个特征字段,vector类型的字段支持的属性如下:
5、dimension 定义type是vector的字段,指定特征维数大小。
6、store_type 特征向量存储类型,有以下三个选项:
“MemoryOnly”:原始向量都存储在内存中,存储数量的多少受内存限制,适用于数据量不大(千万级),对性能要求高的场景
“RocksDB”:原始向量存储在RockDB(磁盘)中,存储数量受磁盘大小限制,适用单机数据量巨大(亿级以上),对性能要求不高的场景
“Mmap”:原始向量存储在磁盘文件中,存储数量受磁盘大小限制,适用单机数据量巨大(亿级以上),对性能要求不高的场景
7、store_param 针对不同store_type的存储参数,其包含以下两个子参数。
cache_size: 数值类型,单位是M bytes,默认1024。store_type=”RocksDB”时,它表示RocksDB的读缓冲大小,值越大读向量的性能越好,一般设置1024、2048、4096和6144即可;store_type=”Mmap”时,它表示写缓冲的大小,不用太大,一般512、1024或2048即可;store_type=”MemoryOnly”,它没有用。
compress: bool类型,默认false。true表示对原始向量进行压缩,一般会将原始向量压缩为原来的50%,可以节省内存和磁盘;false表示不压缩。
查看表空间¶
curl -XGET http://master_server/space/$db_name/$space_name
删除表空间¶
curl -XDELETE http://master_server/space/$db_name/$space_name