说明:
数据类型半精度浮点类型 float16_vector 与 bfloat16_vector 内存压缩特性说明:
理论压缩与实际限制: 使用 float16_vector 或 bfloat16_vector 半精度浮点数理论上可将原始 float32 数据的内存占用降低 50%。然而,由于 HNSW 索引结构中的“边”(edges)需要额外的存储空间,实际内存压缩率通常无法达到理论上的50%。
维度对压缩率的影响: 内存压缩效果会随着向量维度的增加而提升,并逐渐接近 50% 的理论值。维度越高,向量数据本身所占用的内存比例就越大。对高维数据进行半精度压缩带来的节省(接近50%)会显著超过存储索引“边”所需的固定或相对增长较慢的额外开销,使得“边”存储对整体压缩率的影响相对变小。
实测参考:基于真实数据集的验证结果,在1024维和2304维的数据上应用半精度量化后,其内存占用相对于原始 float32 格式通常能实现约 45% 左右的压缩。
检索质量影响(召回率):根据多组公开数据集和业务数据集的测试验证,将数据转换为半精度(float16_vector / bfloat16_vector )进行检索,其召回率(Recall)下降低于 0.5%。
数据类型 | 适用字段 | 存储格式 | 使用场景 |
vector | 向量字段 | 单精度浮点数向量,采用8位指数位 + 23位尾数位 + 1位符号位(共32位) | 适用于需最高精度的计算任务或对误差敏感的向量检索。 |
float16_vector | | 半精度浮点数向量,采用5位指数位 + 10位尾数位 + 1位符号位 的格式 | 适用于尾数精度较高(小数点后保留更多位数)的场景,如 bge-large 等模型生成的嵌入向量。 |
bfloat16_vector | | bfloat16 浮点数向量,采用8位指数位 + 7位尾数位 + 1位符号位的格式 | 适用于向量数值范围较大(更多bit位表达整数)的场景。 |
binary_vector | | 每个维度仅用 1 个比特(bit) 表示 0 或 1,无指数位、尾数位和符号位,直接存储二进制数据 | 适用于稀疏向量。 |
string | 主键 ID 标量字段 | 字符串 | 适用于文本类标签、分类名称、唯一标识符 ID、短描述、状态码、关键词等离散的、非数值型的分类信息。 |
uint64 | 标量字段 | 整型数值,包含正整数和零。 | 适用于需要大范围整数值的标量属性信息。 |
double | | 双精度浮点型数值 | 适用于需要高精度的连续数值或小数的属性信息,例如:价格、权重、分数等。 |
array | | 数组类型,存储一组相同类型的数据元素。当前,数组元素仅支持 string 类型。 | 适用于一个标量字段包含多个同类型的元素集合。 |
json | | 基于文本的格式,由键值对组成的数据对象。用花括号 {} 包裹,例如: "a": {"b": "test", "c": 12},a 中的字段 b 用 a.b 表示。 | 存储结构灵活、嵌套复杂或动态变化的属性集合。 |