首頁 / 部落格 / 為什麼選擇 PostgreSQL 作為資料庫
PostgreSQLBackend

為什麼選擇 PostgreSQL 作為資料庫

從 Goal Star 專案談資料庫的選型考量,以及 PostgreSQL 如何滿足專案需求。

為什麼選擇 PostgreSQL 作為資料庫

Goal Star 使用 PostgreSQL 作為主要資料庫。這篇文章分享選型的考量。

專案需求分析

Goal Star 的資料結構和查詢模式:

  1. 關聯式資料:基金 → 持股 → 交易紀錄,有明確的關聯關係
  2. 歷史資料累積:每日新增交易紀錄,資料量持續成長
  3. 複雜查詢:需要跨表查詢、聚合統計、時間區間篩選
  4. 資料一致性:財務相關資料,正確性很重要

為什麼是 PostgreSQL?

關聯式資料庫的適用性

Goal Star 的資料有明確的結構:基金包含多筆持股紀錄,每筆交易關聯到特定的股票。這種有明確關聯的資料,關聯式資料庫是自然的選擇,JOIN 操作讓跨表查詢變得簡單。

查詢效能優秀

PostgreSQL 在複雜查詢上表現出色。Goal Star 有很多聚合查詢需求:

  • 某基金最近 N 天的買賣統計
  • 某股票在各基金的持有狀況
  • 特定期間的交易排行

PostgreSQL 的查詢優化器能有效處理這些查詢,加上適當的索引,效能完全滿足需求。

JSONB 支援

雖然主要使用關聯式結構,但有些資料適合用 JSON 儲存,例如原始資料的快照、不固定格式的附加資訊。PostgreSQL 的 JSONB 類型提供了這個彈性,而且可以對 JSON 欄位建立索引。

與 Django 整合良好

Django ORM 對 PostgreSQL 的支援最完整,包括 PostgreSQL 特有的欄位類型、全文搜索支援、進階索引類型等。

擴展性

PostgreSQL 有豐富的擴展,例如 pg_trgm 用於模糊搜尋、PostGIS 用於地理資訊、pg_stat_statements 用於查詢效能分析。目前 Goal Star 還沒用到這些,但需要時可以輕鬆加入。

實際使用經驗

穩定性

Goal Star 每日自動寫入與查詢,上線以來運作穩定,沒有遇過資料遺失或效能瓶頸的問題。

維護成本

使用 Railway 託管的 PostgreSQL,幾乎不需要維護。自動備份、自動更新、監控和告警都由平台處理。

什麼情況可能不選 PostgreSQL

  • 極簡單的資料結構:如果只是 key-value 存取,Redis 或 DynamoDB 可能更適合
  • 文件型資料:如果資料結構變化大、沒有固定 schema,MongoDB 可能是選項
  • 超大規模寫入:如果每秒需要寫入數十萬筆,可能需要考慮專門的時序資料庫

結論

PostgreSQL 是一個功能完整、效能優秀的關聯式資料庫。對於有明確資料結構、需要複雜查詢的應用來說,是很可靠的選擇。Goal Star 的資料特性正好適合 PostgreSQL 的強項。

有資料庫選型的問題想討論,歡迎聯絡我