點擊上方的語言選單以切換語言
本文針對 Spring Boot 雲端部署環境,以及作者開發外語學習書電商平台與即時天氣查詢平台這兩個全端系統時分別使用的兩種資料庫:PostgreSQL 與 H2,進行全面性的技術比較與分析。透過以下幾個層面,我們將深入分析 PostgreSQL 與 H2 在架構、效能、持久化與實務應用上的差異。
| 比較維度 | PostgreSQL | H2 |
|---|---|---|
| 產品定位 | Production-Grade RDBMS(伺服器型) | Lightweight Embedded Database |
| 主要使用場景 | 正式環境 / 雲端部署 / 多使用者系統 | 本地開發 / 單元測試 / Demo |
| 架構模式 | Client-Server 架構 | Embedded / In-Memory 模式 |
| 資料持久化能力 | WAL(Write-Ahead Logging)確保高可靠性 | 依運行模式而定(Memory 模式會隨 JVM 終止而消失) |
Client ↓ Application Layer (Spring Boot) ↓ PostgreSQL Server (Independent Process) ↓ Disk Storage (WAL + Data Files)
Application Layer (Spring Boot) ↓ H2 Engine (Within JVM Process) ↓ Memory or Local File
spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driver-class-name=org.h2.Driver spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.datasource.url=jdbc:postgresql://host:5432/db spring.datasource.username=username spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
| 指標 | PostgreSQL | H2 |
|---|---|---|
| 高併發處理 | 強(多進程架構) | 弱(JVM 內共享) |
| 大型資料支援 | 可達 TB 等級 | 不適合大型資料量 |
| 查詢優化器 | 成熟 Query Planner | 簡化版本 |
| 水平擴充能力 | 支援 Replication / Cluster | 不支援分散式節點 |
Client ↓ Cloud Container (Single JVM) ↓ H2 In-Memory
在單實例部署下,所有請求皆導向同一 JVM。
因此 H2 記憶體資料可被不同裝置共享。
Client ──▶ Instance A ──▶ H2 Memory A Client ──▶ Instance B ──▶ H2 Memory B
當系統啟用多實例部署時:
Client ↓ Multiple Spring Boot Instances ↓ External PostgreSQL Service ↓ Persistent Storage
| 部署情境 | 建議資料庫 |
|---|---|
| 本地開發 | H2 |
| CI / 測試環境 | H2 |
| 雲端正式環境 | PostgreSQL |
結論:
H2 屬於開發工具型資料庫;
PostgreSQL 屬於生產級資料持久層。