Mr Dk.
Mr Dk.
# 32.6 SQL Variations and Extensions ## 32.6.1 PostgreSQL Types PG 具有对一些非标准类型的支持,也支持通过 `create type` 命令创建类型。 - Base types:基本类型,也称为 *抽象数据类型*,内置已经被 C 语言实现 - Composite types:对应于一个 field 列表以及相应的类型列表,相当于一张表 - Domains:将基本类型与约束耦合 - Enumerated...
# 32.7 Foreign Data Wrappers FDW 允许用户连接外部数据源,但可以像数据在数据库内部一样使用。FDW 允许 PG 访问其它关系型数据库、KV 数据库、文件,但大部分扩展都不被 PG 官方支持。PG 官方支持的 FDW 模块有: - file_fdw:访问磁盘中的文件,文件格式需要兼容 `copy from` 命令 - postgres_fdw:访问其它 PG server - 开启相同的事务隔离级别,并尽可能减少需要进行传输的数据量,比如下推运算符
# 32.8 PostgreSQL Internals for Developers ## 32.8.1 Installation From Source Code ## 32.8.2 Code Organization - `contrib`:移植工具、分析工具、插件 - `src/bin`:客户端 (前端) 程序 - `src/pl`:对过程语言的支持 - `src/test`:回归测试 - `src/backend`:PG 后端 后端代码组织:...
## Introduction 数据库系统不仅涉及到数据管理,还涉及应用、操作系统、网络服务。出于一些原因,数据库系统的架构在课本上显得比较笼统: - 数据库系统的社区很小,市场迫使只有一些高端产品存活了下来;社区里的人员分布也相对紧密 - 数据库在学术上丢失了系统性,课本通常是怎么方便怎么写  对于一个查询来说,其生命周期中流经的模块有: 1. 客户端与 Client Communications Manager 交互(数据消息 + 控制消息) 2. DBMS 的 Process Manager 按资源情况决定是否立刻分配一个服务线程或稍后再分配 3. Relational Query Processor 负责决定用户是否可以执行该查询,如果可以,则将查询编译为执行计划,由执行器执行 4. 执行器中的叶子算子从...
## Process Models 处理模型决定了如何执行用户的并发请求,如何把请求映射到 OS 的进程或线程上。 几个概念: - 进程:OS 调度,OS 隔离 - OS 线程:OS 调度,OS 进程内不隔离,共享地址空间,稍少的上下文切换开销 - LWT (Lightweight Thread Package):在用户空间实现的线程库,库代码实现调度,更少的上下文切换,但阻塞操作会阻塞所有线程 把处理用户的实体称为 DBMS worker,那么可以有三种处理模型: - 每个 DBMS worker 一个进程: -...
## Parallel Architecture: Processes and Memory Coordination 几种不同的并行架构: - Shared Memory:多个处理器可以以近乎相同的性能访问 RAM - (对 DBMS 来说)透明的 worker 分配(OS 实现) - 共享内存数据结构 - Shared Nothing:一个独立的机器集群通过网络连接 - 集群中的协同完全由 DBMS 实现 - 系统中的每个节点只保存一部分数据(水平数据分布)...
## Relational Query Processor ### 1. Query Parsing and Authorization SQL parser: 1. 检查查询语句是否正确 2. 解析名称和引用 3. 将查询转换为内部格式 4. 认证用户是否有权限执行查询 Parser 首先会将 `FROM` 子句中的表引用转换为全限定名 `server.database.schema.table`,然后检查 catalog 中表是否存在。如果存在,则使用 catalog 中的表信息确认引用的属性存在,另外进行一些标准 SQL...
## Storage Management 两种存储管理模型: - 直接操作低层块设备驱动 - 使用 OS 文件系统 ### 1. Spatial Control 由于 DBMS 比 OS 更有能力知道查询的 I/O pattern,因此 DBMS 完全控制磁盘上的块在理论上具有最佳性能——绕开文件系统。缺点: - DBA 需要将整个磁盘分区划给 DBMS,该分区无法使用文件系统接口进行备份 - 裸磁盘接口通常因 I/O...
## Transactions: Concurrency Control and Recovery DBMS 的查询处理器和事务存储引擎是独立的模块,通过接口耦合。在事务存储引擎中,以下几个模块紧密耦合在一起: - 锁管理器 - 日志管理器 - Buffer pool - Access method ### 1. ACID - 原子性:all or nothing - 一致性:事务的开始和提交时数据库一定在一个一致的状态,由查询执行器在运行时检查 - 隔离性:两个并发的事务不会见到彼此未提交的更新,由锁协议实现 -...
## Shared Components ### 1. Catalog Manager 保存系统中所有数据的 metadata:用户、schema、表、列、索引的名称和关系。其本身也作为一系列表保存在数据库中: - 用户可以用相同的语言和工具查看 metadata - 内部代码可以用相同的代码读写 metadata 出于性能考虑,catalog 中的热点部分会被物化在内存中。 ### 2. Memory Allocator 主流商业系统使用基于 context 的内存分配器。Memory context 是一个内存数据结构,维护了一个包含多段连续内存的列表,也就是一个内存池。其基本的 API 包含: - 给定名称或类型,创建一个...