PostgreSQL|2、PostgreSQL数据库介绍

PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统(RDBMS)。

PostgreSQL 的 主要优点如下:
1)维护者是PostgreSQL Global Development Group,首次发布于1989年6月。
【PostgreSQL|2、PostgreSQL数据库介绍】
2)操作系统支持WINDOWS、Linux、UNIX、MAC OS X、BSD。

3)从基本功能上来看,支持ACID、关联完整性、数据库事务、Unicode多国语言。

4)表和视图方面,PostgreSQL支持临时表,而物化视图,可以使用PL/pgSQL、PL/Perl、PL/Python或其他过程语言的存储过程和触发器模拟。

5)索引方面,全面支持R-/R+tree索引、哈希索引、反向索引、部分索引、Expression 索引、GiST、GIN(用来加速全文检索),从8.3版本开始支持位图索引。

6)其他对象上,支持数据域,支持存储过程、触发器、函数、外部调用、游标7)数据表分区方面,支持4种分区,即范围、哈希、混合、列表。

8)从事务的支持度上看,对事务的支持与MySQL相比,经历了更为彻底的测试。

9)My ISAM表处理方式方面,MySQL对于无事务的MyISAM表,采用表锁定,1个长时间运行的查询很可能会阻碍对表的更新,而PostgreSQL不存在这样的问题。

10)从存储过程上看,PostgreSQL支持存储过程。因为存储过程的存在也避免了在网络上大量原始的SQL语句的传输,这样的优势是显而易见的。

11)用户定义函数的扩展方面,PostgreSQL可以更方便地使用UDF(用户定义函数)进行扩展。

通俗而言主要特点如下:

  • 免费
  • 速度快
  • 平台可移植性
  • 丰富的接口
  • 面向对象的特征
  • 安全性
  • 配合的开源软件很多

PostgreSQL 的 应用劣势如下:
1)最新版本和历史版本不分离存储,导致清理老旧版本时需要做更多的扫描,代价比较大但一般的数据库都有高峰期,如果合理安排VACUUM,这也不是很大的问题,而且在PostgreSQL9.0中VACUUM进一步被加强了。

2)在PostgreSQL中,由于索引完全没有版本信息,不能实现Coverage index scan,即查询只扫描索引,不能直接从索引中返回所需的属性,还需要访问表,而Oracle与Innodb则可以。

存储系统:
存储系统是PostgreSQL的最底层模块,它向下通过操作系统接口访问物理数据,向上为上层模块提供存储操作的接口和函数。PostgreSQL对物理数据的访问和操作都是通过其存储系统模块来进行的。
PostgreSQL存储系统是由以下几个子模块所构成的:
1)页面管理子模块:对PostgreSQL缓冲区页面的组织结构进行定义以及提供页面操作的方法。

2)缓冲区管理子模块:管理PostgreSQL的缓冲区,包括本地缓冲区和共享缓冲区。

3)存储设备管理子模块:数据库记录是存储在存储介质上的,存储设备管理子模块将屏蔽不同物理存储设备(块设备,流设备)接口函数的差异,向上层缓冲区管理子模块提供统一的访问接口函数。

4)文件管理子模块:一般的操作系统对一个进程允许打开的文件数是有限制的,而PostgreSQL服务器有些时候需要打开的文件数是很多的,因此PostgreSQL文件管理子模块自身为了突破这个瓶颈,封装了文件的读写操作,在这里建立了一个LRU链表,通过一定的替换算法来对打开的文件进行管理,使得可以打开的文件数目不受操作系统平台的限制。


页面内存:
  • PostgreSQL内存页面的默认大小是8kB。
  • 页面的逻辑结构被定义成三个部分:
    • 页首部(PageHeader)
    • 元组记录空间(ltem Space)
    • 特殊空间(Special Space)
  • 页首部记录了页面的使用信息,这些信息由元组记录空间和特殊空间的偏移量地址、页面分布格式版本号和页面的事物日志记载点等等所组成。
  • 元组记录空间是存储元组信息的地方,在这里面每个元组记录被称为一个ltem,Item由ltemld和元组数据组成,ltemld内部定义了元组在页面中的偏移量、ltem指针的状态以及元组项的比特位数长度。
  • 特殊空间是为了页面操作所需要的。为了其他模块对页面进行操作,PostgreSQL内部定义了一些页面的操作函数。页面的相关操作包括页面初始化、页面添加、修复和删除。供其他子模块进行调用。这里值得关注的是页面修复与页面批量删除的操作函数。为了实现这两个操作函数,PostgreSQL专门定义了一个数据结构itemldSortData,它为方便在这两个函数中对元组项Item实现降序排序而定义。


    推荐阅读