lantern 通过CMU 15-445课程来学习数据库底层的知识,简单做点记录。 这个课程中通过C++实现数据库,感觉蛮有趣。希望2月中旬开学前啃下来。 前面两节通过note学习了,是比较基础的概念。从第三节开始有些有趣起来了。
lantern 博客记录:CMU 15-445 | Lecture 03 Database Storage I 学习 Lecture 3 看下来的收获: 数据库存储类似操作系统的内存管理。 设计数据库最好不使用os内置的内存管理机制mmap,自定义能获取更好的性能。 链表形式不能直接应用在数据连接上,但是思想可以使用。页表形式就是以链表的思想连接的。通过page id构建page目录表,让我想起以前学习os的段页式了。 数据存储的地址大概是 page_id + offset。 原子性很重要。无论是存储大小还是操作粒度。 不用过于在意范式(理解比较困难,并且实际使用率低)。明白要使用外键来分表,知道什么时候要join连接就可以。 很多数据库系统会进行反范式化(Denormalized Tuple Data)
lantern 博客记录:CMU 15-445 | Lecture 04 Database Storage II 学习 行存储用OLTP(On-line Transaction Processing),列存储用OLAP(On-line Analytical Processing)。 大多数数据库是行存储。行存储的读写较方便,因此工业上可以采取混合形式。呈现给消费者的使用行存储,在企业进行分析时采用列存储,通过OLAP进行分析。 下面引用自Data Storage Models NSM(行存储) 的优缺点如下: - Advantages - 高效插入、更新、删除,涉及表中小部分 tuples - 有利于需要整个 tuple (所有 attributes)的查询 - Disadvantages - 不利于需要检索表内大部分 tuples,或者只需要一小部分 attributes 的查询 DSM (列存储)的优缺点如下: - Advantages - 减少 I/O 操作 - 更好的查询处理和数据压缩支持 - Disadvantages - 涉及少量 tuples、多数 attributes 的查询低效