無伺服器運算為應用程式碼解決了「沒有伺服器要管理」的問題,但資料庫卻是個尷尬的掉隊者。你可以在邊緣以毫秒級執行一個 Worker,然後眼睜睜看著它等待一個位於遙遠單一區域的資料庫。Cloudflare D1 彌合了這道鴻溝:它是一個真正的 SQL 資料庫,建構在 SQLite 之上,存在於 Cloudflare 的網路上,並直接繫結到你的 Workers。你撰寫普通的 SQL,只為實際執行的查詢付費。

本指南說明 D1 是什麼、花費多少、如何從 Worker 查詢它,以及何時應選擇它而非 KV 或傳統的 Postgres 資料庫。

摘要

  • D1 是建構在 SQLite 之上的無伺服器 SQL 資料庫,直接繫結到 Cloudflare Workers
  • 免費額度很慷慨:每天 500 萬列讀取和 100,000 列寫入,外加 5 GB 儲存
  • 按讀取和寫入的列數計費,而非按執行時間:閒置資料庫不產生任何費用
  • 它使用熟悉的 SQL 和預備陳述式,因此幾乎沒有學習曲線
  • 它與平台的其餘部分(Workers AI 、R2 和 KV)搭配,建構完整的應用
  • 使用我的免費桌面應用程式 Easy Cloudflare D1 視覺化管理你的資料庫

Cloudflare D1 是什麼

Cloudflare D1 是一個受管理的無伺服器資料庫:建構在 SQLite 之上的關聯式 SQL 儲存,SQLite 是世界上久經考驗的資料庫引擎之一。這裡的「無伺服器」意味著你永遠不必佈建執行個體、選擇大小或讓任何東西保持執行。你建立一個資料庫,將其繫結到一個 Worker,然後執行 SQL。Cloudflare 處理儲存、持久性和擴展。

因為它講標準 SQL,對任何用過關聯式資料庫的人來說,D1 立刻感到熟悉。你定義資料表,撰寫 SELECTINSERTUPDATEDELETE 陳述式,建立索引,並使用交易。區別在於維運:沒有連線池要調校,沒有伺服器要修補,也沒有閒置成本。

Cloudflare D1 定價與免費額度

D1 的計費模型以最好的方式與眾不同:你按查詢付費,以讀取和寫入的列數衡量,而非按時間。閒置資料庫不產生任何費用,因為沒有執行個體在執行。根據 2026 年的 D1 官方定價

Workers 免費方案

資源每日上限
讀取列每天 500 萬
寫入列每天 100,000
儲存5 GB

Workers 付費方案

資源包含,之後
讀取列每月前 250 億,之後每百萬 0.001 美元
寫入列每月前 5,000 萬,之後每百萬 1.00 美元
儲存5 GB,之後每 GB-月 0.75 美元

沒有資料傳輸費或輸出費用。一個有用的最佳化細節:索引可以透過讓查詢掃描更少的列,大幅減少可計費的列讀取,代價是寫入量的小幅增加。對於讀取密集型工作負載,良好的索引能讓你的延遲和帳單都保持在較低水準。

從 Worker 查詢 D1

你在 wrangler.toml 中繫結一個 D1 資料庫,然後透過 env.DB 存取它。D1 使用預備陳述式,透過將查詢文字與值分離,使你的查詢免受 SQL 注入。

 1export default {
 2  async fetch(request, env) {
 3    // Read with a parameterised query
 4    const { results } = await env.DB
 5      .prepare("SELECT id, title FROM posts WHERE published = ? ORDER BY created_at DESC LIMIT 10")
 6      .bind(1)
 7      .all();
 8
 9    return Response.json(results);
10  },
11};

插入資料遵循同樣的模式:

1await env.DB
2  .prepare("INSERT INTO posts (title, body, published) VALUES (?, ?, ?)")
3  .bind("Hello D1", "My first edge database post", 1)
4  .run();

你也可以批次處理多筆陳述式,在一次來回中高效率地執行它們,當你有多個相關寫入時,這是推薦的做法。

Cloudflare D1 比較 KV 比較 Postgres

選擇正確的儲存原語很重要。以下是 D1 與最常被拿來權衡的兩者的比較。

需求最佳選擇原因
關聯式資料、查詢、聯結D1帶有資料表、索引和交易的真正 SQL
簡單的鍵值查找、設定、快取KV針對邊緣上單鍵的快速讀取進行了最佳化
大型現有關聯式工作負載、複雜擴充Postgres(例如透過 Hyperdrive)適合繁重、功能豐富工作負載的成熟引擎

簡而言之:當你只需盡快按鍵取得一個值時,使用 KV。當你的資料是關聯式的並且想用 SQL 查詢時,使用 D1。當你有大型、成熟的關聯式工作負載,或需要 SQLite 不提供的 Postgres 專有功能時,選用完整的 Postgres 資料庫(Workers 可以連線它,由 Hyperdrive 加速)。

何時 Cloudflare D1 是正確選擇

D1 在以下情況下非常合適:

  • 你的資料是關聯式的,並能從 SQL 查詢、聯結和索引中獲益
  • 你在 Workers 上建構,並希望資料庫位於同一平台
  • 你的工作負載是突發的或從低到中等的,因此按查詢付費勝過常駐執行個體
  • 你想要零維運負擔:無需佈建、修補或連線池
  • 你滿足於 SQLite 的功能集,它涵蓋了絕大多數應用需求

它不太適合超出其限制的超大資料集,或依賴 Postgres 專有擴充的工作負載。對於那些情況,請改為從你的 Worker 連線一個專用資料庫。

一個實際的使用案例

一個典型的 D1 應用:一個部落格或小型 SaaS 後端,其中一個 Worker 處理請求,從 D1 查詢文章或使用者記錄,將上傳的檔案和圖片儲存在 R2 中,把熱點值快取在 KV 中,並選擇性地呼叫 Workers AI 實現摘要之類的功能。一切都執行在一個平台上、在邊緣,沒有伺服器,帳單隨實際用量擴展。這與我建構的 Cloudflare Pages 使用者系統 背後的架構模式相同。

視覺化管理 D1

透過命令列執行遷移和檢查資料是可以的,但圖形用戶端讓日常工作更快。我的免費桌面應用程式 Easy Cloudflare D1 讓你瀏覽資料庫和資料表、執行查詢,並在 Windows、macOS 和 Linux 上的簡潔介面中管理你的 D1 資料,你的憑證在你自己的機器上本機加密。而如果你的技術堆疊將 D1 與 KV 搭配用於快取,我的免費應用 Easy Cloudflare KV 為你的鍵值命名空間做同樣的事。

重點整理

  • D1 是建構在 SQLite 之上的無伺服器 SQL 資料庫,直接繫結到 Cloudflare Workers
  • 免費額度涵蓋每天 500 萬次讀取和 100,000 次寫入,配 5 GB 儲存
  • 按讀取和寫入的列計費,而非按小時;閒置資料庫不產生任何費用
  • 它使用帶有安全預備陳述式的標準 SQL,因此學習曲線極小
  • 鍵值查找用 KV,關聯式 SQL 用 D1,繁重或擴充專有的工作負載用專用 Postgres
  • D1 與 R2、KV 和 Workers AI 結合,建構完整的邊緣應用

常見問題

Cloudflare D1 是什麼? D1 是建構在 SQLite 之上的無伺服器 SQL 資料庫,執行在 Cloudflare 的網路上,並直接繫結到 Workers。你撰寫標準 SQL,永遠不必佈建或管理伺服器。Cloudflare 處理儲存、持久性和擴展。

Cloudflare D1 免費嗎? Workers 免費方案中有免費額度:每天 500 萬列讀取和 100,000 列寫入,配 5 GB 儲存。許多小型應用完全在這些限制內執行。Workers 付費方案大幅提高了包含的額度。

D1 如何定價? 你按讀取和寫入的列付費,而非按執行時間。在付費方案中,每月前 250 億列讀取和 5,000 萬列寫入包含在內,之後每百萬次讀取 0.001 美元、每百萬次寫入 1.00 美元,儲存在前 5 GB 之外為每 GB-月 0.75 美元。沒有輸出費用。

D1 和 KV 有什麼區別? KV 是針對單鍵快速讀取最佳化的鍵值儲存,非常適合快取和設定。D1 是關聯式 SQL 資料庫,用於你想用聯結、索引和交易查詢的結構化資料。按鍵查找用 KV,關聯式查詢用 D1。

D1 能取代 Postgres 嗎? 對於許多中小型應用,能,因為 SQLite 涵蓋了常見的關聯式需求。對於超大資料集、繁重的並行寫入工作負載,或 Postgres 專有擴充,從你的 Worker 連線的專用 Postgres 資料庫(由 Hyperdrive 加速)是更好的選擇。

如何從 Worker 查詢 D1? 在你的 wrangler 設定中繫結資料庫,並透過 env.DB 存取它。使用帶有繫結參數的預備陳述式,例如 env.DB.prepare(“SELECT … WHERE id = ?”).bind(id).all(),這能讓查詢免受 SQL 注入。