Content #
NSM(N-ary Storage Model)就是行式存储,也是 OLTP 数据库默认的存储方式,始终伴随着关系型数据库的发展。我们常用的 OLTP 数据库,比如 MySQL(InnoDB)、PostgreSQL、Oracle 和 SQL Server 等等都使用了行式存储。
顾名思义,行式存储的特点是将一条数据记录集中存在一起,这种方式更加贴近于关系模型。写入的效率较高,在读取时也可以快速获得一个完整数据记录,这种特点称为记录内的局部性(Intra-Record Spatial Locality)。
但是,行式存储对于 OLAP 分析查询并不友好。OLAP 系统的数据往往是从多个 OLTP 系统中汇合而来,单表可能就有上百个字段。而用户一次查询通常只访问其中的少量字段,如果以行为单位读取数据,查询出的多数字段其实是无用的,也就是说大量 I/O 操作都是无效的。同时,大量无效数据的读取,又会造成 CPU 缓存的失效,进一步降低了系统的性能。
图中显示 CPU 缓存的处理情况,我们可以看到很多无效数据被填充到缓存中,挤掉了那些原本有机会复用的数据。