← 返回信息流
AI 资讯Hacker News·3 小时前

PostgreSQL Is Enough

速览

PostgreSQL Is Enough

AI 深度解读

PostgreSQL Is Enough:为何数据库正在吞噬一切?

背景

在 Hacker News 上引发热议的 postgresisenough.dev 网站及其背后的讨论,代表了一种在开发者社区中日益流行的架构哲学:“PostgreSQL 就够了” (PostgreSQL Is Enough)

长期以来,现代应用架构往往遵循“微服务”或“多数据库”模式,即针对不同的功能需求引入专门的技术栈:用 Redis 做缓存,用 Kafka 做消息队列,用 Elasticsearch 做搜索,用 MongoDB 做文档存储,用专门的时序数据库处理监控数据等。这种模式虽然灵活,但也带来了极高的运维复杂度、数据一致性难题以及高昂的基础设施成本。

postgresisenough.dev 网站的出现,是对这一复杂性的反叛。它主张 PostgreSQL 不仅仅是一个关系型数据库,而是一个可以通过扩展(Extensions)和函数(Functions)演变为全能数据平台的基石。该网站通过一系列链接和案例,论证了通过利用 PostgreSQL 强大的生态系统,开发者可以移除架构中的中间件,实现“Just Use Postgres for Everything”(只用 PostgreSQL 处理一切)。

核心内容

该资源库的核心论点在于:通过利用 PostgreSQL 的扩展生态、内置功能以及存储过程能力,绝大多数非核心基础设施组件都可以被移除或简化,从而将逻辑下沉到数据库层。

以下是该网站及讨论中涵盖的主要技术维度及其实现方式:

1. 简化架构:代码下沉至数据库

传统的做法是将业务逻辑放在应用代码中,数据库仅作为存储。新的趋势是将代码移入数据库函数(Database Functions)。这意味着复杂的业务逻辑、数据转换甚至部分 API 逻辑可以直接在 PostgreSQL 中以 PL/pgSQL 或其他语言编写和执行。这不仅减少了网络往返,还利用了数据库引擎的执行效率。

2. 任务调度与队列系统

PostgreSQL 不再需要依赖 Redis 或 RabbitMQ 来处理简单的任务调度和消息队列。

  • 定时任务:通过 pg_cron (Citus Data) 或 pg_timetable (Cybertec) 替代 Cron 或 Quartz,直接在数据库内部执行周期性任务。
  • 消息队列:利用 pgmq (Tembo) 或 pg_cron 结合表结构,构建高性能的消息队列,替代 Kafka 或 RabbitMQ 的部分轻量级场景。

3. 审计、版本控制与安全

Postgres 提供了强大的内置或扩展功能来处理数据治理,无需引入外部审计系统。

  • 审计追踪pgaudit 提供详细的审计日志;pgMementosupa_audit 提供行级历史追踪。
  • 时间旅行temporal_tables 允许查询数据的历史状态,实现类似 Git 的版本控制功能。
  • 权限管理acl 扩展和 pgcrypto 提供了细粒度的访问控制和数据加密能力。
  • 密钥管理:Supabase 提供的 Vault 服务展示了如何在 Postgres 内部安全地管理敏感信息。

4. 搜索与向量数据库

PostgreSQL 正在吞噬搜索和 AI 基础设施的市场份额。

  • 全文搜索:PostgreSQL 内置的 Full Text Search (FTS) 功能强大,配合 pg_trgm 等扩展,足以应对大多数搜索需求,无需引入 Elasticsearch。
  • 向量搜索pgvector 扩展使得 PostgreSQL 能够存储和查询向量数据,支持语义搜索和 AI 应用。结合 ParadeDB 提供的混合搜索能力,Postgres 成为了轻量级向量数据库的有力竞争者。
  • 混合搜索Vecto 等案例展示了如何结合 pgvector 和 Elixir 的 Ecto 实现高效的混合检索。

5. 分析、湖仓一体与大数据

PostgreSQL 正在突破 OLTP(在线事务处理)的边界,进入 OLAP(在线分析处理)领域。

  • 列式存储与分析cstore_fdwParadeDBpg_analytics 模块允许 Postgres 直接查询列式存储格式,进行快速分析。
  • 湖仓一体ParadeDBpg_lakehouseHydra 等项目展示了如何将 Postgres 作为数据湖的查询引擎,直接查询 S3 或 GCS 上的对象存储数据,无需数据迁移。
  • 机器学习PostgresML 允许在数据库内部训练和部署机器学习模型,实现“在数据所在处进行计算”。

6. API 生成与实时通信

PostgreSQL 可以直接作为后端 API 服务器,减少中间层。

  • 自动 APIPostgRESTHasuraPostGraphilepg_graphql 等工具可以根据数据库 schema 自动生成 RESTful 或 GraphQL API。这意味着许多应用的后端 API 层可以完全由数据库驱动,无需编写额外的 API 代码。
  • 实时通知:利用 PostgreSQL 原生的 LISTEN/NOTIFY 机制和 WAL(Write-Ahead Log)监听工具(如 wal2jsonwalex),可以实现极低延迟的实时数据推送,替代 WebSocket 中间件。

7. 数据同步与迁移

  • CDC (Change Data Capture)DebeziumPeerDBpglogical 使得从 PostgreSQL 捕获变更数据并同步到其他系统变得极其简单。
  • 零停机迁移pgroll (Xata) 和 pg-schema-diff (Stripe) 提供了在不停机的情况下进行数据库 schema 变更的能力,解决了传统数据库迁移的痛点。

8. 连接管理与高可用

  • 连接池PgBouncer 是标准的连接池解决方案。
  • 智能路由SupavisorPgCat 提供了更高级的连接管理和路由功能,支持多租户和读写分离。
  • 分片SPQR 等工具支持 PostgreSQL 的自动分片,使其能够水平扩展以处理大规模数据。

9. 性能优化与监控

  • 索引建议Index AdvisorDexterHypoPG 帮助开发者设计最优索引。
  • 查询优化pg_hint_plan 允许手动干预查询计划。
  • 监控PGHeroStatsMgr 提供了全面的数据库健康监控。

10. 真实世界案例

  • Cloudflare:引用了 Cloudflare 的案例,证明仅用 15 个 PostgreSQL 集群即可支撑每秒 5500 万次请求,展示了 Postgres 在极端高并发场景下的潜力。

关键要点

  • 扩展生态是核心:PostgreSQL 的强大不在于其核心代码,而在于其丰富的扩展生态(Extensions)。pgvectorpg_cronpgaudit 等扩展赋予了它处理向量、定时任务、审计等非传统关系型数据的能力。
  • 逻辑下沉 (Logic in DB):趋势是将业务逻辑从应用层下沉到数据库层(Stored Procedures/Functions),以减少网络开销并提高数据一致性。
  • API 即数据库:通过 PostgRESTHasura 等工具,PostgreSQL 可以直接暴露为 API,消除了许多应用后端的需求。
  • 搜索与分析的融合pgvectorParadeDB 等工具使得 PostgreSQL 能够同时胜任向量搜索和列式分析任务,模糊了 OLTP 和 OLAP 的界限。
  • 运维简化:通过移除 Redis、Kafka、Elasticsearch 等中间件,架构复杂度显著降低,运维成本下降,数据一致性更容易保证。
  • 并非万能,但足够强大:虽然标题是“Enough”,但这并不意味着 Postgres 能解决所有问题(例如极大规模的非结构化数据或非关系型高并发写入)。但对于大多数中小企业甚至部分大型企业应用,Postgres 的能力边界已经大大扩展。
  • 社区驱动创新:许多关键功能(如 pg_cron, pgvector, `pg
查看原文 →gist.github.com