首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau
百百 BLOG
首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau

Kurau Blog

「隨心而寫,真真假假,都是我」

一個記錄生活、輸出興趣的個人空間。
遊戲、影視、閱讀、學習……每一段體驗都值得留下文字。

頁面導覽

  • 學習紀錄
  • 遊戲心得
  • 影視Life
  • 書單
  • 委託作品與二創
  • Kurau
  • 合作邀請

找到我

歡迎來 Discord 找我聊天!

“曾經發生的事不可能忘記,只是暫時想不起來而已。”-《神隱少女》

© 2026 Kurau All rights reserved

後端與資料庫

個人網站怎麼選資料庫 (關聯 非關聯)

By Kurau·2023-02-04·Updated 2026-05-09·7 分鐘閱讀

個人網站怎麼選資料庫(關聯 vs 非關聯)

TL;DR
結構化資料(用戶、訂單、訊息) → 關聯式(SQL):MySQL / PostgreSQL。非結構化或半結構化(文章、log、事件) → NoSQL:MongoDB / Firestore。大型網站常常混用,Medium 就是這樣。2026 年個人網站首選 Supabase(PostgreSQL + Auth + Storage 一站式)。

資料庫兩大陣營

SQL(關聯式)

特色
資料模型Schema 預先定義,table + row + foreign key
查詢SQL,支援 JOIN、aggregate、transaction
ACID強一致性(Atomic / Consistent / Isolated / Durable)
擴展垂直擴展為主(更強的單機)
代表MySQL、PostgreSQL、SQLite、SQL Server

優點:

  • 邏輯清晰,符合傳統資料模型
  • 一致性 + 完整性保證
  • 複雜查詢、多 table JOIN 強

缺點:

  • Schema 改動代價高(migration)
  • 高併發讀寫需要優化
  • 不擅長存非結構化資料(JSON 雖能存但查詢繁瑣)

NoSQL(非關聯式)

子類型代表適合
DocumentMongoDB / Firestore / CouchDB文章、商品、半結構化
Key-ValueRedis / DynamoDB快取、session
Wide-columnCassandra / HBase大量時序資料
GraphNeo4j / ArangoDB關係網路、社群

優點:

  • Schema flexible,加欄位不用 migration
  • 水平擴展容易(分片設計)
  • 文件型結構接近 JSON,前端友善

缺點:

  • 沒 JOIN 或實作得較弱
  • 一致性通常較弱(eventual consistency)
  • 複雜查詢要在程式邏輯裡處理

選型決策樹

你的資料 ==結構穩定== 且 ==關係明確==(用戶 → 訂單 → 商品 等)?
├── 是 → SQL(PostgreSQL 或 MySQL)
│
└── 否(資料形狀會變、是文件型、不需 JOIN)?
    ├── 是 → NoSQL Document(MongoDB / Firestore)
    │
    └── 是純快取 / KV?
        └── Redis

真實世界:常常混用

Medium、Twitter、Instagram 等大型網站都是 多種資料庫並用:

資料用途存哪
用戶帳戶、權限、訂閱強一致性、頻繁 JOINPostgreSQL
文章內容(HTML / Markdown)半結構化、版本多MongoDB / S3
文章索引(全文搜尋)反向索引、相似度ElasticSearch
Session / 快取短期、KV、TTLRedis
圖片 / 影片大檔案S3 / Cloud Storage
即時通知 / WebSocket stateKV + pub/subRedis

個人網站不需要這麼複雜,但理解「不同資料用不同庫」這個 pattern 很重要。


個人網站推薦組合(2026)

全 Firebase(最快上線)

Firestore(NoSQL)+ Firebase Auth + Storage + Hosting

優:零後端、5 分鐘起站、Auth 跟 Storage 整合 劣:Vendor lock-in、查詢能力受限、價格在大量 read 時上升快

Supabase(PostgreSQL + 現代 BaaS)⭐ 我的首選

PostgreSQL + Supabase Auth + Storage + Edge Functions

優:

  • SQL 強大,複雜查詢隨意
  • Row Level Security(類似 Firestore Rules,但寫 SQL)
  • 開源、可自架
  • Vercel-style DX

劣:免費額度比 Firebase 嚴格(7 天無活動 project 會被暫停)

Vercel + Postgres / Turso(Edge-first)

Vercel Postgres / Turso(SQLite at edge)+ Vercel Auth

優:邊緣資料庫,延遲超低 劣:還在快速演化,生態未成熟

自架(VPS + Docker)

PostgreSQL + Redis + Caddy + 你寫的 Express/Hono API

優:完全控制、無 vendor lock-in 劣:你要自己負責備份、升級、安全、scaling


我的建議:看「會不會走太遠」

情境推薦
試 idea、不確定會不會做下去Firebase / Supabase free tier
確定要做下去、會有付費用戶Supabase(SQL 跑得夠遠,需要時自架也容易)
高流量 / 已驗證商業模式自架 PostgreSQL 或 managed RDS / PlanetScale
簡單 portfolio、純展示SQLite + Turso,或乾脆 Markdown + Static Site

個人經驗:Firebase 適合 demo,Supabase 適合 會放著跑很久 的專案。SQL 的查詢能力會在 1 年後感謝自己當初選的。


進階:資料量大時要思考的

當資料量到 幾十萬筆,效能會差別:

1. 索引(Index)

-- PostgreSQL
CREATE INDEX idx_posts_author ON posts(author_id);
CREATE INDEX idx_posts_created ON posts(created_at DESC);
sql

沒索引的 column 做 WHERE 或 ORDER BY 會 full scan,慢到爆。

2. 分頁

-- ❌ OFFSET 越大越慢(每次都從頭算)
SELECT * FROM posts ORDER BY created_at DESC LIMIT 20 OFFSET 10000;

-- ✅ Cursor-based(用上一頁最後一筆的 ID 當錨點)
SELECT * FROM posts WHERE created_at < '2026-05-09 10:00:00'
ORDER BY created_at DESC LIMIT 20;
sql

3. 快取

熱資料(首頁、熱門文章)放 Redis,DB 只查冷資料。Vercel Edge Cache、Cloudflare KV 也是現代的選項。

4. 讀寫分離 / Replica

主庫寫,從庫讀,分散負載。Supabase / RDS 都支援。


常見錯誤(個人網站階段)

Over-engineering
個人網站 100 個用戶不需要分庫、分表、Sharding。過早優化是萬惡之源。先用 Supabase / Firebase 跑起來,有問題再說。
Schema 設計太死板
用 SQL 不代表要設計到完美第三正規化。留一個 metadata JSONB 欄位放彈性資料,等模式穩定再 migration。PostgreSQL 的 JSONB 又快又能 index,是 SQL+NoSQL 的最佳兩端。
-- PostgreSQL JSONB 欄位
CREATE TABLE posts (
  id SERIAL PRIMARY KEY,
  title TEXT NOT NULL,
  content TEXT,
  author_id UUID,
  metadata JSONB DEFAULT '{}',  -- ⭐ 彈性欄位
  created_at TIMESTAMPTZ DEFAULT NOW()
);

-- 查 metadata 內某個 key
SELECT * FROM posts WHERE metadata->>'category' = 'tech';
CREATE INDEX idx_metadata ON posts USING GIN (metadata);  -- 可索引!
sql

目錄

    ◆ 相關文章

    • Firebase 資料庫如何建立 與 上傳

      2026-05-09
    • Firebase 驗證 儲存到useContext

      2026-05-09
    • Firebase 前端API 是安全的

      2026-05-09
    • CORS firebase

      2026-05-09
    ← 上一篇虛擬化技術介紹下一篇 →一開始就獲取Firebase storage初始值

    ◆ 關於作者

    Kurau

    個人寫作 / 創作的 SoT,記錄遊戲、影視、學習與生活。

    更多 Kurau 的文章