CMU-15-445笔记(二)
占用空间大的值在tuple中的存储形式
Overflow storage pages
如果c是较大的值的话,c的位置可以放置指针,指向一个格外的页存储真实的数据,如果数据过大,可以在一个overflow page中再指向下一个overflow page。overflow page是在内存中常驻的,并且overflow page对于用户层面是透明的。
常见的overflow page名称与大小
- Postgres: TOAST(> 2KB)
- MySQL: Overflow(> 1/2 size of page)
- SQL Server: Overflow(> size of page)
External Value Storage
这种形式是将较大的数据放在数据库外部,当做一个常规文件,c可以是指针或者路径名称。
数据库不能控制外部文件的内容,也就没有了持久和事务的保护System Catalogs
数据库都会将他们数据的catalog存入数据库内部
catalog主要有 - Table, columns, indexes, views
- Users, permissions
- Internal statistics
它们本身会被存为table,tuple。数据库的存储模型
OLTP
主要包含简单的读写语句,每个语句都只操作数据库的一小部分数据OLAP
主要处理复杂的,需要检索大量数据并聚合的操作Data Storage Models
关系数据库将数据attributes组合成tuple,将结构相似的tuple组合成relation,它没有指定这些relation中的tuple以及tuple的attribute的存储方式。一个tuple的所有attributes并不需要存储在同一个页中
常见的Data Stroage Models有 - 行存储 N-ary Storage Model(NSM)
- 列存储 decomposition Storage Model(DSM)
NSM
NSM将一个tuple的所有attributes在页中连续的存储,这种存储方式适合OLTP场景
DBMS可以将一些常用的attribute建立index,查询语句就可以通过index找到相应的tuples
对于只需要部分attribute的操作来说,这种方式会导致页中所有的数据被读入内存,造成空间上的浪费
这里只需要读入最后两列,但是NSM需要将所有页读入内存NSM优缺点
优点: - 快速的插入,更新,删除
- 对于需要整个tuple是一个很好的选择
缺点:
对于需要大量查询范围,并且仅需要tuple中少数的attributes会造成空间上的浪费DSM
DSM是将列属性放在一个页中
这样就可以很好的解决NSM的问题
需要哪列直接读取即可,没有读取无用列的浪费Tuple Identification
同时这也带出来了一个问题,怎么匹配每个列属性Offsets
最常用的方法,页中的值都有同样的长度,这样就可以直接使用offset来判断对应的行是哪个Embefdded Tuple Ids
给每个attribute添加行id,浪费空间DSM优缺点
优点: - 减少了NSM中冗余的IO,DSM只读取它需要的数据
- 更好的处理查询以及更好的数据压缩支持
缺点: - 涉及少量tuples,多数attributes的查询低效
CMU-15-445笔记(二)