近期工作重点一直放在数据库设计方面,借助这次机会抽时间整理了一些我对PostgreSQL数据库的理解,同时也是对近段时间学习的一个总结。对于很多人而言或许没有听说过这个数据库,通常我们耳边伴随的都是OracleMySQLMicrosoft SQL Server一类的关系型数据库。

但看下数据库排行榜,或许更能直观的认识到PostgreSQL数据库的强大与普遍

wKioL1g-LCKwF6STAAHQ0cc7IsE238.png-wh_50

 

既然PostgreSQL排行这么高,那为何在国内名气不如其他数据库呢?这其中我认为重点在于两点:一、市场推广力度的问题;二、应用场景与国内大多数公司场景不符合造成的。详细等后续再进行分析。

PostgreSQL可以说是世界上可以获得的最先进的开放源码的数据库系统,它包括了丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备,比如 IP 类型和几何类型等;它提供了多版本并发控制,支持几乎所有 SQL构件(包括子查询,事务和用户自定义类型和函数),并且可以获得非常广阔范围的(开发)语言绑定(包括 CC++Javaperltcl,和 python);PostgreSQL整体设计采用了C/S (client/server)结构,几乎支持了所有类型的数据库客户端接口。其次PostgreSQL因其开源特性,形成了一个庞大的开源服务团队,其相关的开源组件多种多样(tablefuncdict_xsynfuzzystrmatchpg_trgmcube),能满足大多数场景下的需求。当然还有人称其是历史最悠久、实战经验最丰富的数据库系统,它的扩展包括自然语言解析、多维索引、地理查询、自定义数据类型等。

PostgreSQL数据库虽然整体非常强大,但也是存在缺陷的。从市场人员角度上来讲,之前在国内基本没有大规模的使用经验与架构设计,大多数停留在找个文档折腾下的程度。这直接导致了该数据库在国内市场的低迷,同样的Mysql数据库在这方面就较为领先了。MySQL在国内互联网行业积累了大量的高可用架构,分布式架构与灾备经验,但是PostgreSQL几乎为0,但放眼国际网,不难看出PostgreSQL的一片天地的。其次在去IOE方面PostgreSQL因语言支持的全面化、数据对接迁移、去Oracle难度相比其他都简单了很多,当然MySQL现在对去Oracle有更好的支持了。

其次在安全方面PostgreSQL事务符合ACID,确保你的提交是完全原子的、一致的、隔离的和持久的。

总结:

PostgreSQL是一个BSD协议的全开源数据库,其强大的查询优化器、丰富的数据类型提供了完善的关系数据存储(支持部分非关系数据库存储)。有丰富的开源cluster软件支持,可应用各种场景下的不同的需求。相比使用MySQL,其核心InnoDB一直被Oracle控制,无法达到最大化的发挥,其国内使用MySQL数据库作为产品核心库的大多数都是中小型项目,其原因虽是综合对比导致,但相比PostgreSQL在中大型项目中的如鱼得水,不得不说我更倾向于使用PostgreSQL

备注:下节谈一下MySQLPostgreSQL的对比优劣势与使用场景。