Lecture 4¶
Database Storage Part 2
Storage¶
File Organization¶
Slotted Pages¶
页中的元组是变长的,所以需要一个额外的数据结构来存储元组的位置信息。这个数据结构叫做Slot,每个Slot对应一个元组。
Log-Structured File Organization¶
Log-Structured File Organization是一种基于日志的文件组织方式。它将所有的更新操作都记录在一个日志中。DBMS只储存日志记录,而不是直接记录数据。如果需要读取数据,DBMS会先读取日志,然后重新构建数据。使用indexes可以加速找到日志的位置。周期性地compact(压缩)日志可以减少读取的时间。
Data Representation¶
元组只是字节的序列,可以使用不同精度的数据类型来表示数据,如Integer、Float、Decimal、Date、Time、String等。
不同数字类型有不同的精度和范围,使用过程中要避免舍入误差的问题。使用带有元数据、精确、可变长的二进制表示可以解决这个问题。
Postgres:Numeric¶
用C语言来表示储存细节:
C | |
---|---|
Large Values¶
大多数DBMS都不允许元组的大小超过一个页的大小。为了存储大的数据,DBMS会将数据分割成多个页,然后使用指针来连接这些页,即seperate overflow storage pages。
External Value Storage¶
有时候,元组中的数据可能会很大,不适合存储在页中。这时候可以使用外部存储,将数据存储在文件中,然后在页中存储指向文件的指针。DBMS无法直接访问外部存储,也无法提供一些保护,如durability(持久性)、transaction(事务)等。