CMU15445-存储引擎-2


数据表示

数据库中数据表示

浮点数存储

需要注意的是,对于浮点数而言,直接使用IEEE-754会存在精度问题。因此多半采用NUMERIC/DECIMAL的方式存储,例如postgres、mysql就使用结构体存储字符串的方式存浮点数。

postgres存储浮点数

mysql存储浮点数

长数据存储

如果tuple中某个属性的数据很长,长到一页装不下的话,就可以新开一个溢出页(overflow page)来单独存这个数据,然后在原tuple中用一个索引来指向这个溢出页。

溢出页 各数据库溢出页标准

system catalogs

通常system catalogs是有DBMS自己管理,以表的形式存储在数据库中information_schema库中。

数据库工作负载(database workloads)

database workloads

从上图中可以看到,TP倾向于写且语句简单,AP倾向于读也语句复杂。

存储模型

虽然我们逻辑上的数据是按行来存的,也就是一个tuple。那在物理上的话,对于OLTP来说,每次需要读取和修改的数据大多数也只是相关的两行,因此,OLTP按行存储(n-ary storgae model, NSM)更适合。

但对于OLAP来说,更多的是需要一张表中某些个别属性的所有数据,这样的话,行存在读取的时候依然会读整张表,会读很多无用数据。这样的情况就可以考虑列存(decomposition storage model, DSM)。

列存定义


  目录