为什么 PostgreSQL 是最受欢迎的数据库?

前言

一项技术使用者占总体的比例,就是流行度。它的含义是:过去一年有多少比例的用户使用了这项技术。流行度代表过去一年的积累使用,是存量指标,也是最核心的事实指标。

2023 年 StackOverflow 调研结果已经新鲜出炉,来自185个国家与地区的9万名开发者给出了高质量的反馈。在今年的调研中,PostgreSQL 在数据库全部三项调研指标(流行度,喜爱度,需求度)上获得无可争议的全能冠军,成为真正意义上"最成功"的数据库 --- --- "PostgreSQL is the Linux of Database! "

不难看出,2023年,PostgreSQL 在流行度上甩开 MySQL,成为世界上最流行的数据库。

过去几年,MySQL 一直霸占着数据库流行榜的榜首,洋洋得意地打起了 "世界上最流行的开源关系型数据库" 这一旗号。不过这次,"最流行"的桂冠真的要让给 PostgreSQL 了。在流行度上,其他数据库和 PostgreSQL / MySQL 比根本就不是一个重量级,自然就更不用说了。

更重要的的是变化趋势:在长期列入排名的十几款头部数据库中,只有 PostgreSQL 的流行度是持续上升的,保持着高歌猛进的增长势头,而其他所有的数据库使用率都在下行。此消彼长,随着时间的推移,PostgreSQL 与其他数据库的流行度差距只会进一步拉大 --- --- 因此在相当长的一段时间内,恐怕是看不到有任何挑战者能撼动 PostgreSQL 现在的位置了。

开源于先进

来自 TimescaleDB 的PostgreSQL 社区年度调研也反映出,用户选择 PostgreSQL 的首要因素便是 开源可靠

开源 --- --- 意味着软件本身可以免费使用,可以二次开发,没有供应商锁定,不存在"卡脖子问题"。 可靠 --- --- 意味它能正确稳定工作,行为表现能够符合预期,而且有着长时间大规模生产环境的优异战绩。越是资深的开发者,便越是看重这两个属性。

宽泛地讲,扩展,生态,社区,协议可以归并入 "开源" 。而稳定可靠,ACID,SQL,扩展,可用性,可以总结为 "先进" 。这便正好与 PostgreSQL 的 Slogan 相呼应 --- --- 世界上最先进的开源关系型数据库。

先进在哪?

PostgreSQL 不仅仅是传统意义上只能做 OLTP 的单纯 "关系型数据库",而是一个多模态数据库。对于中小企业来说,基本单一组件便足以覆盖中小型企业绝大多数场景的数据需求:OLTP,OLAP,时序,地理空间GIS,分词与全文检索,JSON/XML文档,NoSQL特性,图,向量,全都能用上。

  • 自主可控:开源,并采用 BSD 友好协议, 可换皮二开, 大量国产数据库的亲爹。
  • 自动驾驶 : Pigsty x Patroni 可确保硬件故障自愈, 开箱即用的高可用
  • 时序 : TimescaleDB 扩展提供时序数据库能力, 表现不俗!
  • 地理空间 : PostGIS 提供地理空间数据库能力,事实标准!
  • AI向量 : PGVector 提供了向量数据库的能力, 明日之星!
  • 分布式 : 可以使用 Citus 扩展平滑实现单机到分布式数据库的原地升级改造。
  • 文档 : 支持 JSON, JSONB, XML, HStore 等 NoSQL 特性。
  • 图谱 : 递归查询, EdgeDB, AGE, AgensGraph 等多款图数据库插件。
  • 全文检索:内置分词功能, 词向量检索与索引支持,
  • 可编程 : 可以使用 SQL, PLSQL, Python, Perl, Java, JS, R 等语言编写函数
  • 超融合 :多WireProtol支持, 如Babelfish之于MSSQL, FerretDB之于MongoDB。
  • 联邦 : 可以使用 FDW 集成绝大多数种类的其他数据库与异构数据源
  • 流批一体:可以使用触发器、规则系统、物化视图、持续聚集进行流式计算
  • HTAP :拥有表现不俗的分析能力,可使用逻辑复制做 ETL/CDC
  • Serverless : 开源的 Neon 提供 Serverless PostgreSQL 的能力
  • 全栈 : 关系,时序, 地理, 空间, 图, 网络, 消息队列, 向量, 啥都能做。
  • 平台 : 拥有一个强大的插件系统与繁荣的扩展生态,要加装啥功能都有
  • 数据库 : PostgreSQL 是世界上最先进的开源关系型数据库。

PostgreSQL 除了体现在其备受赞誉的内核稳定性上,更是体现在它强大的可扩展性里。插件系统让 PostgreSQL 不再仅仅是一个单线程演化的数据库内核,而是可以有无数并行演进的扩展插件,如同量子计算一般同时探索所有方向上的可能性。每一个数据处理的细分垂直领域,PostgreSQL 绝不会缺席。

正如:PostGIS 之于地理时空数据库,TimescaleDB 之于时序数据库,Citus 之于分布式/列存储/HTAP数据库,PGVector 之于AI向量数据库,AGE之于图数据库,PipelineDB 之于流处理;以及终极杀招 --- --- 使用外部数据源包装器(FDW),使用统一的 SQL 访问所有异构的外部数据库。可以说PG是真正的全栈数据库平台,比起 MySQL 这样单纯的 OLTP 数据库,它的功能要先进太多了。

先进,是 PostgreSQL 压倒 MySQL 的核心竞争力。

为什么是最受欢迎的?

简言之:一个数据库几乎囊括了开发人员需要的所有用例。并且开源的属性还培植了一个应用广泛的生态系统

OLTP (Online Transaction Processing)

PostgreSQL 支持事务的 ACID 属性,可以进行 CRUD(创建-读取-更新-删除)操作。并且它还有一般关系数据库支持的 View, Materialized View, Trigger, 存储过程等。

OLAP (Online Analytical Processing)

我们可以使用 PostgreSQL 进行 OLAP 中常用的聚合处理。PostgreSQL 基于 HTAP(Hybrid transactional/analytical processing)架构,因此可以很好地在同一个数据库中运行 OLTP 和 OLAP 操作。

HTAP 是咨询公司 Gartner 在 2014 年的报告 Hybrid Transaction/Analytical Processing Will Foster Opportunities for Dramatic Business Innovation 中提出的一个名词,其定义为:

HTAP 是一种新兴的应用程序架构,它"打破了事务处理和分析之间的壁垒"。它使人们能够做出更明智和更实时的商业决策。

传统的数据架构将事务系统和分析系统分开。我们需要构建大量批处理的任务从 OLTP 数据库拷贝数据到 OLAP 数据库(数据仓库),这个过程叫做 ETL(Extract-Transform-Load)。这种架构不但增加了系统的复杂度,带来了数据错误,还减慢了商业决策的速度。HTAP 大大提高了数据架构的及时性。

FDW (Foreign Data Wrapper)

FDW 是 PostgreSQL 中的一个扩展,允许我们访问外部数据库中的表结构或数据。

SQL 标准在 2003 年的时候加入了 SQL/MED (SQL Management of External Data),用于处理从 SQL 数据库访问远程对象的标准化方法。2011 年, PostgreSQL 9.1 支持读取远程对象。2013 年,PostgreSQL 9.3 支持写入。现在,FDW 可以访问大部分关系型数据库,NoSQL 数据库和外部文本文件。

流式计算

PipelineDB 是用于高性能时间序列聚合的 PostgreSQL 扩展,旨在为实时报告和分析应用提供支持。

地理空间

PostGIS 是 PostgreSQL 对象关系数据库的空间扩展。它增加了对地理对象的支持,允许在 SQL 中查询位置信息。

时间序列

Timescale 扩展了 PostgreSQL 的时间序列和分析功能。例如,开发人员可以将金融数据流、市场数据与其他业务数据结合起来,构建新的应用程序并发现独特的见解。

分布式表

CitusData 是一个 PostgreSQL 的扩展,将 Postgres 转换为分布式数据库。

结束语

PostgreSQL 数据库内核在数据库领域的生态位,类似于 Linux 操作系统内核在操作系统领域的生态位。对于数据库,至少是 OLTP 数据库来说,数据库内核之争已经尘埃落定 --- --- PostgreSQL 已经是一台足够完美的内核发动机。

相关推荐
千|寻18 分钟前
【画江湖】langchain4j - Java1.8下spring boot集成ollama调用本地大模型之问道系列(第一问)
java·spring boot·后端·langchain
程序员岳焱31 分钟前
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
后端·sql·mysql
龚思凯37 分钟前
Node.js 模块导入语法变革全解析
后端·node.js
天行健的回响40 分钟前
枚举在实际开发中的使用小Tips
后端
wuhunyu1 小时前
基于 langchain4j 的简易 RAG
后端
techzhi1 小时前
SeaweedFS S3 Spring Boot Starter
java·spring boot·后端
写bug写bug2 小时前
手把手教你使用JConsole
java·后端·程序员
苏三说技术2 小时前
给你1亿的Redis key,如何高效统计?
后端
JohnYan2 小时前
工作笔记- 记一次MySQL数据移植表空间错误排除
数据库·后端·mysql
程序员清风3 小时前
阿里二面:Kafka 消费者消费消息慢(10 多分钟),会对 Kafka 有什么影响?
java·后端·面试