基本信息

【插图】

编辑推荐
系统、深入地剖析开源数据库PostgreSQL的实现机制和工作原理
作者跟踪、研究PostgreSQL源代码十年的呕心之作
内容简介
计算机书籍
postgresql是目前广泛应用的开源数据库管理系统。《PostgreSQL
数据库内核分析》从postgresql数据库的源代码入手,深入分析了该数据库管理系统的底层实现细节,揭示了数据库运行的基本原理。《PostgreSQL
数据库内核分析》的主要内容包括:postgresql数据库的体系结构、
存储管理、索引机制、查询编译、查询执行、并发控制机制以及安全等。每个主题都引用了大量的数据结构、图表等进行说明,使读者对实现过程和机理一目了然。
《postgresql数据库内核分析》适合从事数据库领域相关研究的技术人员、高等院校相关专业高年级本科生或研究生阅读,有助于读者进行数据库的高级开发、基于postgresql定制满足需求的数据库系统,或者在数据库内核中实现并验证数据库新技术。
作译者
彭煜玮,武汉大学计算机学院讲师、博士,长期从事数据库理论与技术研究以及教学工作,主要负责“数据库内核分析”等课程的实践教学工作。
目录
第1章 postgresql系统概述
1.1 postgresql简介及发展历程
1.2 postgresql的特性
1.3 postgresql的应用
1.4 postgresql代码结构
1.5 安装postgresql
1.6 postgresql数据库命令
第2章 postgresql的体系结构
2.1 系统表
2.2 数据集簇
2.3 postgresql进程结构
2.4 守护进程postmaster
2.5 辅助进程
2.6 服务进程postgres
2.7 小结
第3章 存储管理
3.1 存储管理器的体系结构
3.2 外存管理
3.3 内存管理
前言
目前,市场上有多种数据库管理系统产品,商业版数据库管理系统产品有Oracle、DB2、SQL Server等,开源版数据库管理系统产品有PostgreSQL、MySQL等。商业版数据库管理系统虽占据着较大的市场份额,但随着新的应用领域的出现以及成本方面的考虑,有很多用户开始采用开源版的数据库管理系统或者在开源数据库基础之上定制自己的数据库管理系统。
开源数据库管理系统的广泛使用也吸引了大量的开发者、技术人员,与此同时也出现了大量与数据库管理系统相关的技术性书籍和教材。但这些书籍要么是介绍数据库管理系统的管理和使用技巧,要么是介绍如何在这些数据库管理系统上开发应用,鲜见从数据库底层实现的角度来分析数据库系统内部实现机制的书籍。
本书尝试从PostgreSQL数据库源代码入手,介绍典型开源数据库管理系统的内部实现细节,揭开一个真正的数据库管理系统的内部奥秘。写作本书的重要动机是向数据库内核开发人员以及科研人员介绍PostgreSQL的实现机制,帮助他们基于PostgreSQL定制满足特定需求的数据库系统,或者在数据库内核中实现并验证数据库的新技术。我们希望本书有助于不同背景和经验的人交换对PostgreSQL源代码的理解,为进一步推进PostgreSQL的发展及使用做出贡献。
读者定位
对本书感兴趣的读者包括:数据库内核开发人员、研究人员、DBA、高校学生、教师以及其他希望了解数据库内核实现的人们。
对于那些希望在PostgreSQL内核中进行改进或裁剪形成自己组织内部定制数据库的开发人员来说,本书将有助于他们了解PostgreSQL内部的实现机制,从而可以按照需要对数据库进行修改。
本书也可以作为计算机专业高年级本科生或者研究生的教材,尤其对于那些日后希望从事数据库领域研究的学生,我们希望本书能够激发学生对数据库内部实现机制的兴趣。
为更好地理解本书的内容,我们希望读者能具备以下基础:
了解数据库系统的基本概念和常用术语。
有使用PostgreSQL开发应用的实际经验。
阅读过介绍数据库系统实现基本原理的书籍。
本书的组织
本书的组织如下:
第1章介绍PostgreSQL的发展历史、特点、在商业领域的应用以及源代码的结构、安装、使用等内容。
第2章介绍PostgreSQL的体系结构,包括系统表的结构和用途、数据集簇、进程结构,并重点分析了守护进程Postmaster、服务进程Postgres以及各个辅助进程的实现机制。
第3章介绍PostgreSQL的存储管理,对PostgreSQL中管理内存和外存的方式进行了详细分析。
第4章介绍PostgreSQL的索引机制,分析了B-Tree、Hash、GiST、GIN等索引的组织结构、操作方式,并介绍了全文搜索TSearch 2模块的实现与使用。
第5章介绍PostgreSQL的查询编译器,给出了如何将一个SQL命令进行编译、优化并最终形成执行计划的过程。
第6章介绍PostgreSQL的查询执行器,描述了执行计划如何被PostgreSQL进行解释执行,对执行计划中每一种节点的执行算法给出了详细分析。
书摘
本章介绍了PostgreSQL中对于各种SQL语句的一般执行流程。对于用户输入的SQL语句,优化器将为可优化语句生成计划树,最终Portal会通过判断选择Executor来处理,而数据描述语句则在执行过程中由Portal使其统一进入Process Utility过程进行执行。
作为查询执行部分的入口,Portal提供了对外的调用接口:PortaIStart、PortalRun、Port,alEnd,对内提供了执行流程和部件的选择。外层通过调用Portal接口,将计划器输出的执行计划传递给Portal,Portal通过对于链表中操作的类型和链表长度等信息来决定选择怎样的执行过程,对于简单的查询语句直接调用Executor,对于需要缓存输出直到执行完成的语句则需要为其增加缓存结构和输出过程,对于更为复杂的过程提供了更为通用的复杂处理流程。不论哪种执行过程,优化器生成的查询计划树由Executor来处理,而其他数据描述语句的功能由ProcessUtility来完成。
对于种类繁多的数据描述语句,每种都有一个Stmt类型的数据结构保存其语法分析的信息,通过对于Stmt类型的判断,ProcessUtility会为其调用相应的语法解析和执行处理过程。
可优化语句则会提供Plan类的子类对象构成的计划树,每个计划节点数据结构共同继承于Plan节点,计划树的每种节点对应了一种物理操作,被分为四大类,除了对应于关系代数的各种操作外,还增加了扫描、物化、唯一等操作。每种节点根据所对应的操作的不同,执行器都为其实现了初始化、执行和清理流程。
Plan只是一个查询计划,初始化过程中为这个计划里的每个节点生成状态节点并构造状态树,保存执行中的相关信息。最终通过Executor执行每种节点的执行函数来实现各种节点的物理操作,在执行中利用状态树中信息处理相关数据。各节点的执行过程普遍包含了投影和选择操作,以及对于下层节点的处理过程调用。
Executor通过迭代的调用每个节点处理过程,从下层计划节点对应的执行流程中获取数据,并经过各种节点的处理流程,得到最终的输出结果。对于修改元组的相关操作则是在获取到元组后通过调用相关存储操作接口实现的。
执行过程需要使用存储和索引提供的接口存取数据,并涉及事务和权限控制等内容,这些会在相关章节给出更加详细的介绍。
……