列存格式、编码与向量化执行引擎

共 23 题
#

1. 列存格式的核心,按列存储带来的压缩率与向量化执行优势?

A 列存适合点查与事务更新
B 列存不需要向量化执行
C 列存的压缩率一定低于行存
D 按列连续存储使同类型数据可高效压缩,且分析查询只读所需列、支持批量向量化处理,从而提升压缩率与执行效率 ✓ 正确答案
#

2. Parquet/ORC 的文件布局(row group、column chunk、page、footer 元数据)与谓词下推的读取流程

A 读取时需读取全部数据块再过滤
B footer 只存 schema,不存统计信息
C 文件按 row group/stripe、column chunk、page 分层,footer 存 min/max 等统计,谓词下推据此跳过不满足的块并只读所需列 ✓ 正确答案
D 谓词下推无法利用 min/max
#

3. 列存的压缩(LZ4/Zstd)与向量化读取协同

A 压缩后必须全部解压成行才能处理
B 按块解压(LZ4 快/Zstd 压缩率高,可配 SIMD 解压)得到连续列向量,只解压所需块,再向量化处理 ✓ 正确答案
C 压缩与向量化无关
D Zstd 一定比 LZ4 快
#

4. 列存的稀疏索引(min/max/bloom)过滤

A min/max 索引只能用于非过滤查询
B min/max 按块排除范围外数据,布隆过滤器精确排除等值不存在的块,二者协同提升谓词下推过滤效率 ✓ 正确答案
C 布隆过滤器能精确判断值一定存在
D 稀疏索引对每个值都建立索引
#

5. 向量化执行按批(batch)处理列数据的原理

A 向量化执行仍逐行处理数据
B 向量化引擎把一批行组织为列向量,在批次上批量运算,减少函数调用、提升缓存局部性与 SIMD 潜力 ✓ 正确答案
C 批处理与列向量无关
D 批处理会增加每行开销
#

6. 向量化执行消除虚函数与提升 ILP

A 向量化用批量大函数与类型特化消除虚函数分派,并通过循环独立运算与 SIMD 提升指令级并行 ✓ 正确答案
B 虚函数分派开销很小,无需优化
C ILP 与向量化无关
D 消除虚函数会降低执行效率
#

7. 向量化执行利用 SIMD 指令加速比较/聚合

A SIMD 一次只能处理一个数据
B SIMD 只适用于字符串
C 利用连续同质的列向量,SIMD 一次比较/累加多个元素(生成掩码、多元素归约),显著提升比较与聚合吞吐 ✓ 正确答案
D SIMD 无法用于过滤
#

8. ClickHouse 的向量化与 data skipping index

A ClickHouse 只有行存,无向量化
B data skipping index 会读取全部数据
C ClickHouse 用列存 + SIMD 向量化执行,并以 data skipping index(min/max、bloom 等)按 granule 跳过不满足谓词的块 ✓ 正确答案
D ClickHouse 不支持列压缩
#

9. StarRocks 的向量化执行与 CBO

A StarRocks 用逐行解释执行,无优化器
B StarRocks 原生向量化引擎按批 SIMD 执行,CBO 基于统计信息选最低代价计划(join 顺序/算法、filter 下推),两者协同提升性能 ✓ 正确答案
C CBO 不需要统计信息
D 向量化与 CBO 相互冲突
#

10. 向量化的 null 处理与三值逻辑

A 向量化可以忽略 null 的三值逻辑
B null 无需位图表示
C 向量化用 validity bitmap 表示 null,并用位运算实现三值逻辑,对无 null 列走快速路径,兼顾正确性与性能 ✓ 正确答案
D 三值逻辑与 SQL 查询无关
#

11. 向量化执行的内存布局(列向量的连续内存)

A 列向量用指针逐个指向分散的内存
B 列向量连续内存布局提升缓存局部性、兼容 SIMD 对齐与批量加载,是向量化高性能的基础 ✓ 正确答案
C 连续内存布局会降低缓存命中率
D 向量化不需要连续内存
#

12. 列存的编码,字典、RLE、Delta、Bitpacking

A 所有编码都适用于所有数据
B 字典编码适合低基数列、RLE 适合连续重复、Delta 适合有序列、Bitpacking 适合低位宽整数,可组合使用 ✓ 正确答案
C RLE 适合高基数随机列
D Delta 编码对随机无序列压缩率最高
#

13. 列存的谓词下推与跳块(skip index)

A 谓词下推只能作用于结果集
B 跳块需要读取全部数据才能判断
C 谓词下推到存储层后,用块级 min/max 与 bloom 元数据跳过不满足的块,只读取解码可能满足的数据 ✓ 正确答案
D 谓词下推与存储格式无关
#

14. 列存的写入放大与合并(compaction)

A 列存适合频繁随机更新,无需合并
B 列存不支持写入
C compaction 只会增加文件数量
D 列存采用 append-only 与后台 compaction 合并小文件,用 size-tiered/leveled 策略平衡写放大与读放大 ✓ 正确答案
#

15. Parquet/ORC 的编码,字典、RLE、Delta 编码与谓词下推?

A 编码后统计信息丢失,无法谓词下推
B 编码与谓词下推相互冲突
C 编码(字典/RLE/Delta)压缩存储但仍保留块级统计,谓词下推据此跳块,字典编码还可在字典层过滤 ✓ 正确答案
D 谓词下推必须逐行解码所有数据
#

16. 向量化执行引擎,SIMD 批量处理与火山模型逐行的性能差异?

A 两者性能完全相同
B 向量化只对点查有效
C 火山模型比向量化快
D 向量化消除逐行虚函数分派、提升缓存局部性与 SIMD 并行,在分析查询上性能可达数量级提升 ✓ 正确答案
#

17. 向量化聚合与哈希 Join 的实现(radix 分区、SIMD 哈希表)

A 哈希 Join 只能逐行探测
B 向量化聚合无法用 SIMD
C radix 分区会降低缓存命中率
D 向量化聚合/join 用 SIMD 批量处理哈希与累加,radix 分区提升缓存命中,SIMD 哈希表加速探测与插入 ✓ 正确答案
#

18. 列存相比行存在分析查询的 IO 优势

A 列存和行存读取相同的数据量
B 列存只读所需列、压缩率高、可跳块,分析查询大幅减少 IO,优于行存整行读取 ✓ 正确答案
C 行存在分析查询时 IO 更少
D 列存无法压缩列数据
#

19. 列存在 HTAP 中的行存列存同步

A 行存与列存完全独立,无需同步
B 列存作为行存的衍生副本,通过复制/日志准实时同步,最终一致,兼顾分析性能与事务不阻塞 ✓ 正确答案
C 列存同步必须强一致,否则数据错误
D HTAP 不需要列存
#

20. 列存与行存的混合(PAX)布局

A PAX 是纯行存,无列存特性
B PAX 无法支持点查
C PAX 在行存页内按列存数据,兼得列式扫描的 IO 优势与行定位的事务友好性,适合宽表混合负载 ✓ 正确答案
D PAX 是纯列存,无行存特性
#

21. 向量化对比逐行解释执行的性能量级

A 两者性能完全相同
B 向量化消除逐行解释/虚函数开销并利用缓存与 SIMD,在扫描聚合场景性能通常相差约一个数量级甚至更高 ✓ 正确答案
C 解释执行在扫描场景更快
D 向量化性能提升不到 1 倍
#

22. 列存下的写路径,如何解决随机更新与小写入的性能问题?

A 列存可以直接原地更新单个列单元
B 随机更新在列存中零成本
C 列存无法处理任何写入
D 列存通过写缓冲、append-only 与后台 compaction 把随机小写转为批量顺序写,配合读写分离解决随机更新性能问题 ✓ 正确答案
#

23. 嵌套类型(Struct/Array/Map)在列存中的存储与 flatten 优化

A 嵌套类型在列存中只能按行存储
B 嵌套类型用 def/rep level 或 offset 扁平化为平面列,flatten 拆出独立列与偏移,便于投影裁剪与向量化处理 ✓ 正确答案
C flatten 会丢失嵌套语义
D 嵌套类型无法在列存中压缩