2
0
Fork 0
mirror of https://github.com/Vonng/ddia.git synced 2026-06-21 00:47:05 +08:00

Update ch3.md

Refine sentenses
This commit is contained in:
Yen-Kuang Lu 2024-01-20 12:22:43 +08:00 committed by GitHub
parent 0c5a80aefe
commit 09193dc95d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

2
ch3.md
View file

@ -524,7 +524,7 @@ WHERE product_sk = 31 AND store_sk = 3
对于需要扫描数百万行的数据仓库查询来说,一个巨大的瓶颈是从硬盘获取数据到内存的带宽。但是,这不是唯一的瓶颈。分析型数据库的开发人员还需要有效地利用内存到 CPU 缓存的带宽,避免 CPU 指令处理流水线中的分支预测错误和闲置等待,以及在现代 CPU 上使用单指令多数据SIMD指令来加速运算【59,60】。
除了减少需要从硬盘加载的数据量以外,列式存储布局也可以有效利用 CPU 周期。例如,查询引擎可以将一整块压缩好的列数据放进 CPU 的 L1 缓存中然后在紧密的循环即没有函数调用中遍历。相比于每条记录的处理都需要大量函数调用和条件判断的代码CPU 执行这样一个循环要快得多。列压缩允许列中的更多行被同时放进容量有限的 L1 缓存。前面描述的按位 “与” 和 “或” 运算符可以被设计为直接在这样的压缩列数据块上操作。这种技术被称为矢量化处理vectorized processing【58,49】。
除了减少需要从硬盘加载的数据量以外,列式存储布局也可以有效利用 CPU 周期。例如,查询引擎可以将一整块压缩好的列数据放进 CPU 的 L1 缓存中然后在紧密的循环即没有函数调用中遍历。相比于每条记录的处理都需要大量函数调用和条件判断的代码CPU 执行这样一个循环要快得多。列压缩允许列中的更多行被同时放进容量有限的 L1 缓存。前面描述的按位 “与” 和 “或” 运算符可以被设计为直接对整块压缩列数据块操作。这种技术被称为矢量化处理vectorized processing【58,49】。
### 列式存储中的排序顺序