探索PostgreSQL:一份简介

发表时间: 2023-03-23 22:32

1.1 什么是PostgreSQL

1.1.1 PostgreSQL 概述

PostgreSQL 数据库是目前功能最强大的开源数据库, 支持丰富的数据类型(如JSON 和JSONB类型、数组类型)和自定义类型。而且它提供了丰富的接口,可以很容易地扩展功能。

1.1.2 PostgreSQL 数据库的优势

PostgreSQL 有以下的优势

a, PostgreSQL数据库目前是功能最强大的开源数据库,它是最接近工业标准SQL92的查询语言,并且正在实现新的功能以兼容最新的SQL标准:SQL2003。

b, 稳定可靠:PostgreSQL 是唯一能做到零丢失的开源数据。有报道称国外的部分银行也在使用PostgreSQL数据库。

c,开源省钱:PostgreSQL 数据库是开源的,免费的,而且是BSD协议,在使用和二次开发上基本没有限制。

d,支持广泛:PostgreSQL 数据库支持大量的主流开发语言,包括C、C++、Java、Phthon以及PHP等

e,PostgreSQL 社区活跃: PostgreSQL基本上每三个月推出一个补丁版本。

1.1.3 PostgreSQL 应用现状和发展趋势

PostgreSQL 目前在国外很流行,特别是近几年使用PostgreSQL数据库的公司越来越多。

比如,日本电信(NTT)大量使用PostgreSQL 替代Oracle数据库,并且在PostgreSQL之上二次开发了Postgres-XC, 网络电话公司Skype 也大量使用PostgreSQL,并贡献了一些与PostgreSQL数据库配套的开源软件。

全球最大的CRM软件服务提供商Salesforce 也开始使用PostgreSQL。

在国内越来越多的公司开始使用PostgreSQL,如斯凯网络(股票代码:MOBI)的后台数据库基本使用的都是PostgreSQL数据库,去哪儿网(qunar.com)也大量使用了PostgreSQL数据库。

主流的云服务提供商亚马逊、阿里云的RDS(关系型数据库服务)同样提供了PostgreSQL的支持

1.2 PostgreSQL 数据库与其他数据库的对比

1.2.1 PostgreSQL 与MYSQL数据库的对比

可能有人会问, 既然已经有一个人气很高的开源数据库MYSQL了,为什么还要使用PostgreSQL?这主要是因为在一些应用场景中,使用MYSQL有以下几个缺点。

a, 功能不够强大:MYSQL的多表连接查询方式只支持“Nest Loop”, 不支持“Hash join” 和 “sort merge join”。不仅如此还有很多SQL 语法也不支持,子查询性能比较低。它不支持sequence。

b, 性能优化工具和度量信息不足:MYSQL在运行过程中出现问题,只产生很少的性能数据,很难让维护人员准确定位问题产生的原因。

c,在线操作功能较弱

相对这些MYSQL的弱点, PostgreSQL有以下几个优点:

PostgreSQL功能强大:支持是所有主流的多表连接查询的方式(如:“Nest Loop”、 “Hash join”等)

性能优化工具与度量信息丰富: PostgreSQL数据库中有大量的性能视图,可方便地定位问题(比如:可看到正在执行的SQL, 可通过锁视图看到谁在等待、哪条记录被锁定等)

在线操作功能好:PostgreSQL增加空值的列时,本质上只是在系统表上把列定义上,无须对物理结构做更新, 这就让PostgreSQL在加列时可以做到瞬间完成。PostgreSQL还支持在线建索引的功能,建索引的过程可以不锁定更新操作。

从PostgreSQL9.1开始,支持同步复制功能(synchronous replication)通过master和slave之间的复制可以实现零数据丢失的高可用方案。

另外,由于MySQL对SQL语法支持的功能更弱,基本上不适合做数据仓库。虽然也有些厂商开发了基于MYSQL的数据仓库存储引擎(如Infobright),但这个方案只是解决了分数据仓库的问题,SQL功能弱的问题任无法解决。

PostgreSQL数据中还有一些支持移动互联网时代的新功能,如空间索引。POSTGIS是最著名的一个开源GIS系统,它是PostgreSQL中的一个插件,通过它可以很方便地解决LBS中的一些位置计算问题。

综上所述,PostgreSQL数据库是一个功能强大,又带有移动互联网特征的开源数据库。如果你仅仅是想把数据库作为一个简单的存储功能使用(如一些大的互联网公司),一些较复杂的功能都想放在应用中来实现,那么选择MYSQL或一些NOSQL产品都是合适的;如果你应用的数据访问很简单(如大多数的blog 系统)那么后端使用MYSQL也是很合适的。但如果你的应用不像blog 系统那么简单,而你又不想消耗太多的开发资源,那么PostgreSQL是一个明智的选择,最有说服力的例子就是图片分享公司instagram,在使用Python+PostgreSQL架构后,只是十几个人就支持起了整个公司的业务。在数据库中使用PostgreSQL的感觉,就是在开发语言中使用Python,会让你的工作变得简洁和高效。