<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>D1 on BenzHub</title><link>https://benzhub.github.io/tags/d1/</link><description>Recent content in D1 on BenzHub</description><generator>Hugo</generator><language>zh-TW</language><lastBuildDate>Sat, 22 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://benzhub.github.io/tags/d1/index.xml" rel="self" type="application/rss+xml"/><item><title>D1 Time Travel 與備份:時間點還原與災難復原 | Cloudflare 完整教學</title><link>https://benzhub.github.io/post/cloudflare/022-d1-time-travel/</link><pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/cloudflare/022-d1-time-travel/</guid><description>&lt;blockquote&gt;
&lt;p&gt;上一篇《&lt;strong&gt;D1 Sessions API 與讀取複本&lt;/strong&gt;》,我們讓全球讀取又快又不失一致。但資料庫的日常從來不缺意外——手滑一個 &lt;code&gt;DROP TABLE&lt;/code&gt;、跑錯一條沒加 &lt;code&gt;WHERE&lt;/code&gt; 的 &lt;code&gt;UPDATE&lt;/code&gt;、一個壞掉的 &lt;strong&gt;migration&lt;/strong&gt; 把 schema 搞砸。這時你需要的是「時光倒流」。&lt;strong&gt;Cloudflare D1&lt;/strong&gt; 內建的 &lt;strong&gt;Time Travel(時間點還原)&lt;/strong&gt; 永遠啟用、免費,能把資料庫還原到&lt;strong&gt;過去 30 天&lt;/strong&gt;內任一時刻;搭配 &lt;code&gt;wrangler d1 export&lt;/code&gt;/&lt;code&gt;import&lt;/code&gt; 的&lt;strong&gt;匯出匯入&lt;/strong&gt;與 &lt;strong&gt;R2&lt;/strong&gt; 長期封存,就能建立起完整的&lt;strong&gt;備份、還原與災難復原&lt;/strong&gt;防線。這篇我們把 Time Travel 的 &lt;code&gt;info&lt;/code&gt;/&lt;code&gt;restore&lt;/code&gt;、書籤撤銷、匯出匯入,到災難復原流程一次講透,為 D1 系列收尾。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>D1 Sessions API 與讀取複本:全球低延遲讀取 | Cloudflare 完整教學</title><link>https://benzhub.github.io/post/cloudflare/021-d1-sessions-api/</link><pubDate>Fri, 21 Aug 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/cloudflare/021-d1-sessions-api/</guid><description>&lt;blockquote&gt;
&lt;p&gt;上一篇《&lt;strong&gt;D1 Migrations&lt;/strong&gt;》我們學會了像 &lt;strong&gt;Git&lt;/strong&gt; 一樣安全地演進資料表結構。但當你的應用擴張到全球、讀取流量湧入,新的問題浮現:主要資料庫(&lt;strong&gt;Primary&lt;/strong&gt;)在美國西部,新加坡的使用者每次讀取都要繞半個地球,延遲高得惱人。&lt;strong&gt;D1&lt;/strong&gt; 的 &lt;strong&gt;讀取複本(Read Replication)&lt;/strong&gt; 讓你在全球六個地區部署唯讀副本,使用者就近讀取;而 &lt;strong&gt;Sessions API&lt;/strong&gt; 則是啟用複本的鑰匙,並透過 &lt;strong&gt;書籤(Bookmark)&lt;/strong&gt; 機制,在「低延遲」與「一致性」這對天生矛盾之間取得平衡。這篇我們把 &lt;code&gt;env.DB.withSession()&lt;/code&gt; 的 &lt;code&gt;first-primary&lt;/code&gt; / &lt;code&gt;first-unconstrained&lt;/code&gt; 兩種模式、&lt;code&gt;read-your-writes&lt;/code&gt;(讀取自身寫入)、書籤的跨請求傳遞,以及成本與一致性的權衡一次講透。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>D1 Migrations:用版本控制管理資料表結構 | Cloudflare 完整教學</title><link>https://benzhub.github.io/post/cloudflare/020-d1-migrations/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/cloudflare/020-d1-migrations/</guid><description>&lt;blockquote&gt;
&lt;p&gt;上一篇《&lt;strong&gt;D1 入門:Serverless SQLite&lt;/strong&gt;》我們學會了在 Workers 裡用 SQL 建表、查資料、做交易。但真實專案的資料表結構不會一次定案:今天加個 &lt;code&gt;posts&lt;/code&gt; 表、明天幫 &lt;code&gt;users&lt;/code&gt; 加個欄位、後天補幾個索引。如果每次都手動 &lt;code&gt;wrangler d1 execute&lt;/code&gt; 一堆 SQL、還要用人腦記「本地套過沒、遠端套過沒」,遲早會亂。這就是 &lt;strong&gt;D1 Migrations(資料庫遷移)&lt;strong&gt;要解決的問題——它讓你像 &lt;strong&gt;Git&lt;/strong&gt; 管理程式碼一樣,把 &lt;strong&gt;schema&lt;/strong&gt; 的每一次變更變成&lt;/strong&gt;有編號、可追蹤、可重播、跨環境一致&lt;/strong&gt;的版本。這篇我們把 &lt;code&gt;wrangler d1 migrations create&lt;/code&gt; / &lt;code&gt;list&lt;/code&gt; / &lt;code&gt;apply&lt;/code&gt; 一路走完,含遷移檔命名順序、&lt;code&gt;--local&lt;/code&gt; vs &lt;code&gt;--remote&lt;/code&gt;、種子資料、CI 自動遷移,以及和 &lt;strong&gt;Drizzle ORM&lt;/strong&gt; 搭配的思路。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>D1 入門:Serverless SQLite,在邊緣用 SQL 查資料,免管理資料庫 | Cloudflare 完整教學</title><link>https://benzhub.github.io/post/cloudflare/019-d1-intro/</link><pubDate>Wed, 19 Aug 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/cloudflare/019-d1-intro/</guid><description>&lt;blockquote&gt;
&lt;p&gt;上一篇《&lt;strong&gt;R2 物件儲存&lt;/strong&gt;》我們把「大型檔案」搬上了雲,但很多應用真正需要的其實是&lt;strong&gt;結構化的關聯式資料&lt;/strong&gt;:使用者表、訂單表、商品表,要能用 &lt;strong&gt;SQL&lt;/strong&gt; 做 &lt;code&gt;JOIN&lt;/code&gt;、&lt;code&gt;WHERE&lt;/code&gt;、交易——這是 KV 和 R2 都不擅長的。這一塊,Cloudflare 交給了 &lt;strong&gt;D1&lt;/strong&gt;:一個底層是 &lt;strong&gt;SQLite&lt;/strong&gt;、跑在**邊緣(edge)**的 &lt;strong&gt;Serverless&lt;/strong&gt; 關聯式資料庫。這篇我們從什麼是 D1、怎麼用 &lt;code&gt;wrangler d1 create&lt;/code&gt; 建庫 + binding、&lt;code&gt;wrangler d1 execute&lt;/code&gt; 建表,到查詢核心 &lt;code&gt;prepare&lt;/code&gt; / &lt;code&gt;bind&lt;/code&gt; / &lt;code&gt;first&lt;/code&gt; / &lt;code&gt;all&lt;/code&gt; / &lt;code&gt;run&lt;/code&gt;、&lt;code&gt;batch&lt;/code&gt; 交易、參數化查詢防注入,以及本地 vs 遠端的差別,一路帶你在 Workers 裡用熟悉的 SQL 查資料。&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>