schemapb中int8、int16标量字段的表示及Milvus存储方式咨询
Milvus中Int8/Int16类型的存储方式解析
从Milvus的实现逻辑来看,Int8和Int16类型并不会做打包存储,每个值都会占用完整的4字节int32空间,具体逻辑如下:
- 对应Proto定义里的
IntArray,其底层存储结构是repeated int32 data = 1;,本身就是按int32的粒度来存储数据的。 - Milvus处理Int8/Int16类型时,会直接将单个数值做类型提升(比如int8转int32、int16转int32),然后存入
[]int32切片,不会执行字节打包操作。这种设计能简化数据处理逻辑,避免读写时频繁做解包/打包运算,以此提升整体性能。 - 虽然会产生一定空间开销,但对于Milvus的核心向量检索场景而言,这种空间损耗远低于逻辑复杂度降低带来的收益,属于合理的设计取舍。
内容的提问来源于stack exchange,提问作者Qi Xiang
相关产品推荐
相关产品推荐

