209 lines
3.6 KiB
Markdown
209 lines
3.6 KiB
Markdown
# vdb
|
||
|
||
## 安装
|
||
|
||
执行
|
||
```
|
||
git clone https://git.opencomputing.cn/yumoqing/vdb.git
|
||
cd vdb
|
||
bash ./build.sh
|
||
```
|
||
执行完成后:
|
||
1 添加了一个vdb.service, 重启后会自动启动向量数据库服务
|
||
2 使用sudo systemctl XXX vdb.service开启动,停止, 重启服务
|
||
3 app/vdbapp.py 正在执行
|
||
|
||
|
||
## 字段类型
|
||
以下字段类型可用在集合的话数据类型中
|
||
|
||
* "str": 可变长字符串, 需要max_length属性
|
||
* "int": 整数类型
|
||
* "bool": 逻辑值类型
|
||
* "float": 浮点数
|
||
* "fvector": 浮点数向量,常规向量都用此类型,
|
||
* "bvector": 二进制向量 二分向量使用,
|
||
* "json": json格式的数据
|
||
|
||
一些例子
|
||
```
|
||
[
|
||
# 1. 主键字段 (必选): str 类型,非自增(手动指定ID以便与业务系统关联)
|
||
{
|
||
"name": "id",
|
||
"type": "str",
|
||
"max_length": 32
|
||
"is_primary": True,
|
||
"auto_id": False
|
||
},
|
||
|
||
# 2. 向量字段 (核心): 存储 CLIP 提取的特征,768 维
|
||
{
|
||
"name": "video_embedding",
|
||
"type": "fvector",
|
||
"dim": 768
|
||
},
|
||
|
||
# 3. 变长字符串: 存储视频存储路径,需指定最大长度
|
||
{
|
||
"name": "file_path",
|
||
"type": "str",
|
||
"max_length": 512
|
||
},
|
||
|
||
# 4. 浮点数: 存储评估得分 (如 VBench 的综合分数)
|
||
{
|
||
"name": "quality_score",
|
||
"type": "float"
|
||
},
|
||
|
||
# 5. 布尔值: 标记是否已完成人工复核
|
||
{
|
||
"name": "is_reviewed",
|
||
"type": "bool"
|
||
},
|
||
|
||
# 6. 整数: 存储视频的时长(秒)
|
||
{
|
||
"name": "duration_sec",
|
||
"type": "int"
|
||
},
|
||
|
||
# 7. JSON 字段: 存储非结构化的元数据(如 VBench 的 16 个子维度细节)
|
||
# Milvus 2.4+ 支持 JSON 动态解析查询
|
||
{
|
||
"name": "meta_data",
|
||
"type": "json"
|
||
}
|
||
]
|
||
```
|
||
|
||
## API
|
||
对外提供http的接口,安全要求会提供客户端ip过滤
|
||
|
||
### 创建集合
|
||
|
||
path:/v1/createcollection
|
||
method:POST
|
||
headers:{
|
||
"Content-Type": "application/json"
|
||
}
|
||
data:{
|
||
colname: 集合名字,必须提供
|
||
fields: 集合字段集,请参照字段类型提供
|
||
description:可选, 集合描述
|
||
}
|
||
|
||
成功返回
|
||
{
|
||
"status":"SUCCEEDED"
|
||
}
|
||
|
||
失败返回
|
||
{
|
||
"status":"FAILED",
|
||
"error": 错误信息
|
||
}
|
||
|
||
### 删除集合
|
||
|
||
path:/v1/dropcollection
|
||
method:POST
|
||
headers:{
|
||
"Content-Type": "application/json"
|
||
}
|
||
data:{
|
||
colname: 集合名字,必须提供
|
||
}
|
||
|
||
成功返回
|
||
{
|
||
"status":"SUCCEEDED"
|
||
}
|
||
|
||
失败返回
|
||
{
|
||
"status":"FAILED",
|
||
"error": 错误信息
|
||
}
|
||
|
||
### 向集合插入一到多条记录
|
||
|
||
path:/v1/upsert
|
||
method:POST
|
||
headers:{
|
||
"Content-Type": "application/json"
|
||
}
|
||
data:{
|
||
colname: 集合名字,必须提供
|
||
data: 数据字典或数据字典数组
|
||
}
|
||
|
||
成功返回
|
||
{
|
||
"status":"SUCCEEDED"
|
||
}
|
||
|
||
失败返回
|
||
{
|
||
"status":"FAILED",
|
||
"error": 错误信息
|
||
}
|
||
|
||
### 删除集合一到多条记录
|
||
|
||
path:/v1/delete
|
||
method:POST
|
||
headers:{
|
||
"Content-Type": "application/json"
|
||
}
|
||
data:{
|
||
colname: 集合名字,必须提供
|
||
pks: 主键或主键数组
|
||
description:可选, 集合描述
|
||
}
|
||
|
||
成功返回
|
||
{
|
||
"status":"SUCCEEDED"
|
||
}
|
||
|
||
失败返回
|
||
{
|
||
"status":"FAILED",
|
||
"error": 错误信息
|
||
}
|
||
|
||
### 查询集合数据
|
||
|
||
path:/v1/createcollection
|
||
method:POST
|
||
headers:{
|
||
"Content-Type": "application/json"
|
||
}
|
||
data:{
|
||
colname: 集合名字,必须提供
|
||
fields: 集合字段集,请参照字段类型提供
|
||
description:可选, 集合描述
|
||
}
|
||
|
||
成功返回
|
||
{
|
||
"status":"SUCCEEDED"
|
||
"data": 返回数据
|
||
}
|
||
|
||
失败返回
|
||
{
|
||
"status":"FAILED",
|
||
"error": 错误信息
|
||
}
|
||
|
||
返回数据有如下结构
|
||
{
|
||
"total": -1, # 不知道总共多少条符合条件的数据
|
||
"page": 当前页(起始1)
|
||
"pagerows": 每页记录数
|
||
"rows": 记录数据
|
||
}
|