D1
它是什麼
想像一張有整齊行列的電子表格,你的應用可以向它提出精確的問題,比如"列出 6 月所有已付款的訂單"。D1 就是 Cloudflare 基於 SQLite 構建的 serverless 資料庫——正是那個井然有序、可查詢的表格儲存。("serverless"意味著沒有需要你來搭建或持續執行的伺服器,這一切都由服務商打理。)SQL(結構化查詢語言,Structured Query Language)是向資料庫提問的標準語言。你建立一個數據庫,把它繫結到一個 Worker 或 Pages 專案,然後通過一套小巧的 JavaScript (應用程式程式設計介面,你所呼叫的一組命令)用純 SQL 查詢它。沒有需要調整規格的伺服器,也沒有需要管理的連線池——Cloudflare 負責儲存、複製和擴縮,你只為讀寫的行數付費。
優勢
- 真正的 SQL(SQLite 方言)——熟悉的
SELECT、JOIN、事務和索引。 - Serverless:無需預置、沒有連線數限制、可縮容到零。
- 通過單一繫結與 Workers 和 Pages 緊密整合。
- 讀複製把副本放在靠近使用者處,實現低延遲讀取。
- 對於典型應用負載成本低廉,並提供可用的免費額度。
取捨
- SQLite 語義:超大數據集和極高的寫併發不是它的強項。
- 單庫大小限制意味著非常大的資料可能需要分片(拆分到多個數據庫)或改用 R2(Cloudflare 的檔案儲存)。
- 比 Postgres/MySQL 更新,因此工具鏈和生態仍在成熟中。
- 最適合從邊緣訪問;從 Cloudflare 之外使用它則不那麼自然。
何時使用
在 Cloudflare 託管的專案中為應用資料選擇 D1:使用者記錄、內容、設定、會話後設資料——任何契合關係模型、並與你的 Workers 或 Pages 應用一同存在的資料。
Vibe coding 契合度
當一個 agent 已經在 Workers 上構建時,D1 是一個強力的預設選項,因為資料庫、schema 和查詢都在同一個專案裡。可以讓 agent 把遷移儲存在帶版本的 .sql 檔案中並用 Wrangler 應用它們,這樣 schema 就是可復現的。繫結讓在處理器內部查詢變成一行程式碼。
# wrangler.toml
[[d1_databases]]
binding = "DB"
database_name = "app-db"
database_id = "your-d1-id"
# Create a DB and run a migration
npx wrangler d1 create app-db
npx wrangler d1 execute app-db --file=./schema.sql