为什么 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 已经是一台足够完美的内核发动机。

相关推荐
2401_857610031 小时前
SpringBoot社团管理:安全与维护
spring boot·后端·安全
凌冰_2 小时前
IDEA2023 SpringBoot整合MyBatis(三)
spring boot·后端·mybatis
码农飞飞2 小时前
深入理解Rust的模式匹配
开发语言·后端·rust·模式匹配·解构·结构体和枚举
一个小坑货2 小时前
Rust 的简介
开发语言·后端·rust
monkey_meng2 小时前
【遵守孤儿规则的External trait pattern】
开发语言·后端·rust
Estar.Lee3 小时前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip
新知图书3 小时前
Rust编程与项目实战-模块std::thread(之一)
开发语言·后端·rust
盛夏绽放4 小时前
Node.js 和 Socket.IO 实现实时通信
前端·后端·websocket·node.js
Ares-Wang4 小时前
Asp.net Core Hosted Service(托管服务) Timer (定时任务)
后端·asp.net
uzong4 小时前
7 年 Java 后端,面试过程踩过的坑,我就不藏着了
java·后端·面试