表空间操作

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,
        "id_type": "String",
        "retrieval_type": "IVFPQ",
        "retrieval_param": {
            "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",
            "index": true
        },
        "field6": {
            "type": "vector",
            "dimension": 128
        },
        "field7": {
            "type": "vector",
            "dimension": 256,
            "format": "normalization",
            "store_type": "RocksDB",
            "store_param": {
                "store_param": 2048,
                "compress": false
            }
        }
    }
}
' 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  
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,HNSW,GPU,IVFFLAT,BINARYIVF,FLAT,不同的检索模型需要的参数配置及默认值如下:

IVFPQ:

字段标识 字段含义 类型 是否必填 备注
ncentroids 聚类中心数量 int 默认2048
nsubvector PQ拆分子向量大小 int 默认64, 值为4的倍数
"retrieval_type": "IVFPQ",
"retrieval_param": {
    "ncentroids": 2048,
    "nsubvector": 64
}

HNSW:

字段标识 字段含义 类型 是否必填 备注
nlinks 节点邻居数量 int 默认32
efConstruction 构图时寻找节点邻居过程中在图中遍历的深度 int 默认40
"retrieval_type": "HNSW",
"retrieval_param": {
    "nlinks": 32,
    "efConstruction": 40
}

注意: 1、向量存储只支持MemoryOnly
      2、创建索引不需要训练,index_size 值大于0均可

GPU(针对GPU编译版本):

字段标识 字段含义 类型 是否必填 备注
ncentroids 聚类中心数量 int 默认2048
nsubvector PQ拆分子向量大小 int 默认64, 值为4的倍数
"retrieval_type": "GPU",
"retrieval_param": {
    "ncentroids": 2048,
    "nsubvector": 64
}

IVFFLAT:

字段标识 字段含义 类型 是否必填 备注
ncentroids 聚类中心数量 int 默认256
 "retrieval_type": "IVFFLAT",
 "retrieval_param": {
     "ncentroids": 256
 }

注意: 1、向量存储方式只支持RocksDB

BINARYIVF:

字段标识 字段含义 类型 是否必填 备注
ncentroids 聚类中心数量 int 默认256
"retrieval_type": "BINARYIVF",
"retrieval_param": {
    "ncentroids": 256
}

注意: 1、向量长度是8的倍数

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类型的字段支持的属性如下:

字段标识 字段含义 类型 是否必填 备注
dimension 特征维数 int  
format 归一化处理 string 设置为normalization对添加的特征向量归一化处理
store_type 特征存储类型 string 支持MemoryOnly、Mmap和RocksDB, 默认MemoryOnly
store_param 存储参数设置 json 针对不同store_type的存储参数
model_id 特征插件模型 string 使用特征插件服务时指定

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表示不压缩;目前支持RocksDB和MemoryOnly, Mmap暂不支持。

查看表空间

curl -XGET http://master_server/space/$db_name/$space_name

删除表空间

curl -XDELETE http://master_server/space/$db_name/$space_name