参考资料
http://db.csail.mit.edu/madden/high_perf.pdf
三种常用的并发模型
- 共享内存(share-memory)
- 共享硬盘(share-disks)
- 无共享(share-nothing)
共享内存(例如SMP)的系统中,多个CPU共享一个内存系统和一组硬盘。优点是编程简单,不需要实现复杂的分布式锁/提交协议。但扩展性受限:memory bus将成性能瓶颈、复杂的CPU的L2 Cache一致性算法。所以,CPU核数一般不会太大.
共享硬盘的系统中,每个处理结点有自己的内存,但是共享存储,如通过SAN(Storage Area Network)或 NAS(Network attached storage)。共享硬盘有共享内存系统类似的扩展性限制:网络带宽;另外,因为没有共享内存,所以必须实现复杂的分布式锁和提交协议以保证一致性(基于消息/message,网络开销)。
为了提高共享硬盘系统的性能,有些厂商实现了共享缓存(share-cache)的设计,访问数据的步骤
- 首先检查本地缓存池
- 如果没有,检查集群中其他节点的缓存池
-
如果没有,访问硬盘
这种系统设计,对OLTP场景工作良好,但是对于OLAP/数据仓储不太适用。OLAP/数据仓储的访问模式是顺序扫描,cache命中率低而导致1、2步不必要的开销。
在无共享(shar-nonthing)系统中,每个处理器都有自己的内存和硬盘。数据被垂直划分到各个节点,每个节点处理自己的数据(包括锁的维护、buffer pool)。无共享集群可以有廉价的普通PC组成。但是做设计数据关联时,依然会有分布式锁、提交协议、网络的性能开销,所以数据划分很重要,以使得各节点尽量独立而减少依赖。
数据仓储中普遍用的技术
-
列式存储
- OLAP业务一般读取几个字段,而不是整行
- 列式存储中列数据顺序存放,IO效率高
- 列式存储,方便数据压缩(同一列的数据类型相同)
- 压缩