PostgerSQL技术问答-00 Why Postgres

笔者关于Nodejs的还有很多的坑还没有填上,这里又打算开一个新的坑系列-PostgreSQL,因为它们都是在Web应用开发中常用的技术。这里也不是写书,写博客就可以更随意一点。内容的碎片化不可避免,但只能先这样。可能等到时机成熟的时候,再重新组织整理一下。

这个系列的主题是:《PostgerSQL使用问答》,主要是总结针对在开发中遇到的一些PostgreSQL技术方面的疑问和思考,并且结合实例来进行分析和解答,在这个过程中,既解决了技术方面的问题,也提升了开发者的认知和水平。

本文作为系列文章的开篇,我们将会讨论一些和PostgreSQL数据库系统的背景相关的问题。笔者认为,这是除了技术本身之外,涉及到一个软件系统的价值观和方法论的基本问题,其实对于我们理解它是比较重要的。

什么是PostgreSQL

PostgreSQL的官方网站(下图)是: www.postgresql.org

网站已经对于PostgreSQL,说得很清楚明白了。

PostgreSQL:

The World's Most Advanced Open Source Relational Database

这句话里面,有三个要点:

  • 关系数据库系统

主要指关系数据模型和SQL语言的支持。说明PG是一个什么类型的软件和系统。

  • 开源软件

PG确实是开源软件。但笔者认为,PG的强大,更在于它拥有一个成熟稳定的开源技术社区,能够保证其作为开源软件系统的长期平稳发展,这其实比软件开源本身还重要。

  • 最先进

如果考虑的是开源关系数据库系统,它确实也名副其实。这主要体现在其强大而稳定的性能,对SQL完善的支持,丰富的特性,可扩展性等等。从这些角度来看,它也一点都不逊色于像Oracle、MS SQL Server这类主流的商业软件。

再说说这个产品名称是怎么来的。笔者在另一篇文章里面也提到过,PostgersSQL其实是三个单词(Post-gres-SQL)构成的:

  • gres: Ingres的简化(后详)
  • Post: 后Ingres的意思,意为这个软件发展来自Ingres
  • SQL: 使用SQL技术和语言的关系型数据库系统

简单而言,PostgerSQL的意思就是"支持SQL的后ingres数据库系统"。这其实简单的体现了这个产品的一个发展历史和过程。

Ingres的全称是Iteractive Graphics REtrieval System(交互式图形检索系统) 是始于1970年代早期加州大学伯克利分校的一个研究项目,在这个项目的研究基础上产生了关系型数据模型的理论和软件雏形;Postgres是其在80年代的后继项目,增加了类型定义和完整描述数据关系的能力;实际上Postgres计划在1993年已经终止;但是在1994年,有人在其BSD许可的基础上,利用其原始代码进行了后续开发,主要是加入SQL语言解释器,让它更像是一个标准的SQL数据库软件,命名为Postgres95,并在1996年重新命名为PostgreSQL,并作为开源软件系统,基于互联网进行分发,初始分发的版本就是PostgreSQL 6.0,可以视为PostgreSQL软件的正式开端。

为什么要选择PostgreSQL

单纯的讨论这个问题,或者和其他软件进行技术细节方面的比较,其实也没有太大的意义。因为实际上,任何一个软件,只要有人使用,就可能有它的独特价值和应用场景。没有软件天生就好或者烂,好的软件都是逐渐发展和完善起来的,关键是这个改善的过程能否平稳持续,并且能够与时俱进。

当然,选择PG肯定也是有一些理由的,笔者这里想从借用一张Hasso Plattner Institut制作的关系型数据库家谱开始:

从这个家谱,我们应该可以感觉到,在所有的关系数据库系统分分合合,纵横交错,新旧变换的历程来看,PostgreSQL的发展一直是比较顺利稳定的。同时,作为开源软件系统,它也非常重视开源社区的建设和管理,这些都奠定了它在技术发展上,具有一定稳定性、适应性和前瞻性。

笔者感觉,和其他系统相比,PostgerSQL在技术上是经典的开源和互联网软件开发体系,这些特点和优势在于:

  • 专注于互联网应用开发的支持,和传统关系数据库系统专注于企业应用开发构成差异化
  • 发展策略是小幅改进、快速迭代、重视生态,贴近和适应互联网应用开发技术的发展
  • 理论先行,作为学院派软件,PG具有前瞻性的系统架构,严谨规范的架构设计,合理的软件和特性的生命周期管理
  • 功能丰富,易于扩展,这些都是快速多变的互联网应用开发所需要的,例如对于多种数据类型、数组、JSON等的支持,pgcrypto、uuid扩展等等
  • 跨平台支持,由于开源和基于C语言开发的属性,PostgreSQL很早就规划了对于多个主流操作系统平台的支持
  • 标准的关系型数据库特性:关系数据模型、高效的存储和索引引擎、ACID、SQL语言、网络服务等等
  • SQL标准规范的积极支持,并扩展出很多强大和实用的使用方式,如CTE、Returning、filter等等
  • 软件系统的稳定性,虽然没有数据方面的支撑,但从笔者的使用体验还有社区口碑而言,这个系统是非常稳定和可靠的,而且对于运维的要求,并没有想象那么高,还是非常易用和健壮的

这里额外提供一个有趣的信息,PostgreSQL的产品logo(下图),就是一头大象。可能开发者认为大象可以很好的代表PosgreSQL的产品特性和形象,就是强大、稳健和可靠。

Postgres有什么缺点或者不足

从技术和宏观上来看,几乎没有。因为关系型数据库系统技术发展到现在,已经是非常成熟和稳定的了。市场上存活下来这么几家,基本上可用性都非常好,不会有什么无法被接受的功能缺失或者缺点,有一些差异,几乎完全取义于对于场景和适应程度,开发体系的匹配以及开发者喜好。

但如果要较真的话,这里也可以尝试例举几条:

  • XID

XID就是TranactionID(事务ID),PG使用XID来对事务进行标识和管理。但PG设计的XID是一个32位的无符号整数。它有容量限制(2^32,40亿)。如果数据库的修改操作过于频繁或者数据过于庞大,可能会溢出并导致数据错乱的情况。这时需要运维人员进行关注和维护。

  • 数据表分区

老版本的PG,没有提供完善的数据表分区方案,需要一些额外的设置和操作。但这一问题已经在最近几个版本的迭代中基本上得到了解决,现在的数据表分区,功能和易用性已经基本和Oracle无异。

  • 群集和高可用

这一点可能相比Oracle略微逊色。PostgreSQL没有原生的群集和高可用性技术,但它也提供了基于日志的数据复制机制。一些社区和第三方开发者在此基础上开发了扩展的高可用集群系统方案。

  • 技术资源

笔者觉得,Postgres的社区是做得非常好的。但可能有人会认为它作为开源软件体系,没法提供和商业软件同一级别的服务。还有,特别是在中国,PG的应用还没有像欧美那样广泛,相关的技术、人才的资源相对还是缺乏的。

小结

本文作为PostgreSQL技术问答的开篇,简单的讨论了PostgreSQL的发展背景,和作为技术和产品的特点,让读者在正式进入系列之前,对这个技术有一个相对客观合理的理解和认知。

相关推荐
热河暖男13 分钟前
【实战解决方案】Spring Boot+Redisson构建高并发Excel导出服务,彻底解决系统阻塞难题
spring boot·后端·excel
技术宝哥2 小时前
Redis(2):Redis + Lua为什么可以实现原子性
数据库·redis·lua
学地理的小胖砸3 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai1233 小时前
Redis解析
数据库·redis·缓存
数据库幼崽4 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd4 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
noravinsc4 小时前
redis是内存级缓存吗
后端·python·django
betazhou4 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh5 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
noravinsc6 小时前
django中用 InforSuite RDS 替代memcache
后端·python·django