通过CMU 15-445课程来学习数据库底层的知识,简单做点记录。

这个课程中通过C++实现数据库,感觉蛮有趣。希望2月中旬开学前啃下来。

前面两节通过note学习了,是比较基础的概念。从第三节开始有些有趣起来了。

博客记录:CMU 15-445 | Lecture 03 Database Storage I 学习

Lecture 3 看下来的收获:

  1. 数据库存储类似操作系统的内存管理。
  2. 设计数据库最好不使用os内置的内存管理机制mmap,自定义能获取更好的性能。
  3. 链表形式不能直接应用在数据连接上,但是思想可以使用。页表形式就是以链表的思想连接的。通过page id构建page目录表,让我想起以前学习os的段页式了。
  4. 数据存储的地址大概是 page_id + offset。
  5. 原子性很重要。无论是存储大小还是操作粒度。
  6. 不用过于在意范式(理解比较困难,并且实际使用率低)。明白要使用外键来分表,知道什么时候要join连接就可以。
  7. 很多数据库系统会进行反范式化(Denormalized Tuple Data)

博客记录:CMU 15-445 | Lecture 04 Database Storage II 学习

  1. 行存储用OLTP(On-line Transaction Processing),列存储用OLAP(On-line Analytical Processing)。
  2. 大多数数据库是行存储。行存储的读写较方便,因此工业上可以采取混合形式。呈现给消费者的使用行存储,在企业进行分析时采用列存储,通过OLAP进行分析。

下面引用自Data Storage Models

NSM(行存储) 的优缺点如下:
-   Advantages
    -   高效插入、更新、删除,涉及表中小部分 tuples
    -   有利于需要整个 tuple (所有 attributes)的查询
-   Disadvantages
    -   不利于需要检索表内大部分 tuples,或者只需要一小部分 attributes 的查询

DSM (列存储)的优缺点如下:
-   Advantages
    -   减少 I/O 操作
    -   更好的查询处理和数据压缩支持
-   Disadvantages
    -   涉及少量 tuples、多数 attributes 的查询低效

© 2018-2025 0xFFFF