Hyperdrive
資料庫不用搬家——Hyperdrive 讓它連起來又快又像在全球各地。
Hyperdrive 是什麼?
Hyperdrive 是一個「加速器」,它擋在你既有資料庫(例如 PostgreSQL 或 MySQL)的前面,讓你從 Cloudflare Workers 查詢它時變得很快——無論請求來自世界哪個角落。
一般來說,「區域型資料庫(regional database,指只住在單一機房的資料庫)」從遠方連過去很慢,而且每個請求都重開一條新連線又會多出延遲。Hyperdrive 用「連線池」和「查詢快取」同時解決這兩個問題。
把它想成…
一條通往資料庫的 VIP 快速通道。與其每次都從頭撥號連線(慢吞吞的握手),Hyperdrive 會保留幾條已經接通的熱線、還記住最近的答案——所以大多數請求都能直接跳過等待。
為什麼要用 Hyperdrive?
Workers 跑遍全球,但你的資料庫只待在一個地方。沒有幫手的話,每次查詢都要付一趟長距離來回加上建立連線的成本。Hyperdrive 把這個痛點拿掉,讓你既有的 SQL 資料庫表現得像專為邊緣(edge)打造一樣。
連線池
重複利用一池已經建好的熱連線,而不是每個請求都重開一條。
查詢快取
把熱門讀取查詢的結果快取起來,重複查詢幾乎瞬間回傳。
不用搬遷
保留你現有的 Postgres / MySQL 供應商,只要讓 Workers 透過 Hyperdrive 連過去就好。
宛如全球部署
遠方的 Workers 查詢單一區域資料庫時,不再有平常那種拖延。
什麼時候該用 Hyperdrive?
你已經有 SQL 資料庫
在 AWS、Neon、PlanetScale 等地方既有、又想保留的 Postgres 或 MySQL。
全球使用者、單一資料庫
使用者遍布全球,但只有一個區域資料庫,遠方連起來很慢。
連線數爆掉
無伺服器函式把資料庫的連線數用光——用連線池就能解決。
讀取為主的查詢
同樣的 SELECT 一直重複出現,快取就能帶來大幅加速。
怎麼開始用?
把你資料庫的「連線字串(connection string,就是包含主機、帳號、密碼、資料庫名稱的那一串 URL)」交給 Hyperdrive。接著把它綁定,然後在 Worker 裡用一般的 Postgres 驅動程式連線即可。
建立 Hyperdrive 設定
用連線字串讓它指向你既有的資料庫。Wrangler 會印出一組 id。
npx wrangler hyperdrive create my-db-config \ --connection-string="postgres://user:password@db-host.example.com:5432/mydb"綁定到 Worker
把這個 id 加進 wrangler.jsonc 的 HYPERDRIVE 綁定。
{ "hyperdrive": [ { "binding": "HYPERDRIVE", "id": "<paste-your-id-here>" } ] }安裝 Postgres 驅動程式
使用熱門的 pg 套件(順便裝它的 TypeScript 型別)。
npm i pg npm i -D @types/pg透過 Hyperdrive 查詢
讀取 env.HYPERDRIVE.connectionString,照平常方式連線——連線池和快取都交給 Hyperdrive 處理。
import { Client } from "pg"; export default { async fetch(request, env, ctx) { const client = new Client({ connectionString: env.HYPERDRIVE.connectionString, }); await client.connect(); const { rows } = await client.query("SELECT * FROM products LIMIT 10"); ctx.waitUntil(client.end()); return Response.json(rows); }, };部署上線
發布 Worker,查詢就會走上快速通道了。
npx wrangler deploy
重點概念
連線字串
包含主機、連接埠、帳號、密碼和資料庫名稱、用來找到你資料庫的那串 URL。
連線池
一組事先建好、保持熱線並在請求間共用的連線,藉此省下建立連線的成本。
查詢快取
最近讀取查詢的結果會被記住,一模一樣的重複查詢就能跳過資料庫。
資料庫仍是唯一來源
Hyperdrive 只負責加速存取;你真正的資料仍然存放在你自己的資料庫裡。
小提示與注意事項
依資料新鮮度調整快取
查詢快取預設開啟,很適合那些不會每秒都變動的資料。如果某個查詢一定要回傳最新的值,可以針對它關閉快取。
- Hyperdrive 在免費與付費方案都能用,可以免費先試。
- 支援 PostgreSQL(以及 Neon、CockroachDB、Timescale 等相容資料庫)和 MySQL。
- 用 ctx.waitUntil(client.end()) 關閉連線,才不會拖慢你的回應。
- 想要 Cloudflare 原生的 SQL 資料庫?可以看看 D1。