Điện toán serverless đã giải quyết vấn đề “không có máy chủ để quản lý” cho mã ứng dụng, nhưng cơ sở dữ liệu lại là phần lạc lõng khó xử. Bạn có thể chạy một Worker tại biên trong vài mili giây, rồi nhìn nó chờ một cơ sở dữ liệu nằm ở một vùng xa duy nhất. Cloudflare D1 lấp đầy khoảng trống đó: nó là một cơ sở dữ liệu SQL thực sự, xây trên SQLite, sống trên mạng lưới của Cloudflare và gắn trực tiếp vào các Worker của bạn. Bạn viết SQL thông thường, và chỉ bị tính phí cho các truy vấn bạn thực sự chạy.

Hướng dẫn này giải thích D1 là gì, chi phí ra sao, cách truy vấn nó từ một Worker, và khi nào nên chọn nó thay vì KV hoặc một cơ sở dữ liệu Postgres truyền thống.

Tóm tắt

  • D1 là một cơ sở dữ liệu SQL serverless xây trên SQLite, gắn trực tiếp vào Cloudflare Workers
  • Gói miễn phí rất hào phóng: 5 triệu dòng đọc và 100.000 dòng ghi mỗi ngày, cộng 5 GB lưu trữ
  • Bạn bị tính phí cho dòng đọc và ghi, không phải cho thời gian hoạt động: cơ sở dữ liệu rảnh rỗi không tốn gì
  • Nó dùng SQL quen thuộc với câu lệnh chuẩn bị, nên gần như không có đường cong học tập
  • Nó ghép với phần còn lại của nền tảng, Workers AI , R2 và KV, để xây các ứng dụng hoàn chỉnh
  • Quản lý cơ sở dữ liệu của bạn một cách trực quan với ứng dụng máy tính miễn phí Easy Cloudflare D1 của tôi

Cloudflare D1 là gì

Cloudflare D1 là một cơ sở dữ liệu được quản lý, serverless: một kho SQL quan hệ xây trên SQLite, một trong những công cụ cơ sở dữ liệu được kiểm chứng kỹ nhất thế giới. “Serverless” ở đây nghĩa là bạn không bao giờ cấp phát một phiên bản, chọn kích thước, hay giữ bất cứ thứ gì chạy. Bạn tạo một cơ sở dữ liệu, gắn nó vào một Worker, và chạy SQL. Cloudflare lo việc lưu trữ, độ bền và mở rộng.

Vì nó nói SQL chuẩn, D1 lập tức quen thuộc với bất kỳ ai từng dùng một cơ sở dữ liệu quan hệ. Bạn định nghĩa bảng, viết các câu lệnh SELECT, INSERT, UPDATEDELETE, tạo chỉ mục, và dùng giao dịch. Khác biệt nằm ở vận hành: không có pool kết nối để tinh chỉnh, không có máy chủ để vá, và không có chi phí khi rảnh rỗi.

Giá và gói miễn phí Cloudflare D1

Mô hình tính phí của D1 khác thường theo cách tốt nhất: bạn trả cho truy vấn, đo bằng dòng đọc và ghi, không phải theo thời gian. Một cơ sở dữ liệu rảnh rỗi không tốn gì vì không có phiên bản nào đang chạy. Theo bảng giá D1 chính thức cho năm 2026:

Gói Workers Free

Tài nguyênGiới hạn hằng ngày
Dòng đọc5 triệu mỗi ngày
Dòng ghi100.000 mỗi ngày
Lưu trữtổng cộng 5 GB

Gói Workers Paid

Tài nguyênBao gồm, rồi
Dòng đọc25 tỷ đầu tiên / tháng, rồi 0,001 USD mỗi triệu
Dòng ghi50 triệu đầu tiên / tháng, rồi 1,00 USD mỗi triệu
Lưu trữ5 GB đầu tiên, rồi 0,75 USD mỗi GB-tháng

Không có phí truyền dữ liệu hay phí egress. Một chi tiết tối ưu hữu ích: chỉ mục có thể giảm mạnh số dòng đọc bị tính phí bằng cách để truy vấn quét ít dòng hơn, đổi lại là một mức tăng nhỏ về khối lượng ghi. Với khối lượng nhiều đọc, lập chỉ mục tốt giữ cho cả độ trễ lẫn hóa đơn của bạn ở mức thấp.

Truy vấn D1 từ một Worker

Bạn gắn một cơ sở dữ liệu D1 trong wrangler.toml, rồi truy cập nó qua env.DB. D1 dùng câu lệnh chuẩn bị, giúp giữ truy vấn của bạn an toàn trước tiêm nhiễm SQL bằng cách tách văn bản truy vấn khỏi các giá trị.

 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};

Chèn dữ liệu theo cùng một mẫu:

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

Bạn cũng có thể gộp nhiều câu lệnh để chạy chúng hiệu quả trong một lần đi-về, đây là cách tiếp cận được khuyến nghị khi bạn có vài thao tác ghi liên quan.

Cloudflare D1 so với KV so với Postgres

Chọn đúng nguyên thủy lưu trữ là quan trọng. Đây là cách D1 so với hai lựa chọn thường được đem ra cân nhắc nhất.

Nhu cầuLựa chọn tốt nhấtVì sao
Dữ liệu quan hệ, truy vấn, joinD1SQL thực với bảng, chỉ mục và giao dịch
Tra cứu khóa-giá trị đơn giản, cấu hình, cachingKVTối ưu cho việc đọc nhanh một khóa đơn tại biên
Khối lượng quan hệ lớn sẵn có, tiện ích mở rộng phức tạpPostgres (ví dụ qua Hyperdrive)Công cụ trưởng thành cho khối lượng nặng, giàu tính năng

Tóm lại: dùng KV khi bạn chỉ cần lấy một giá trị theo khóa nhanh nhất có thể. Dùng D1 khi dữ liệu của bạn là quan hệ và bạn muốn truy vấn nó bằng SQL. Tìm đến một cơ sở dữ liệu Postgres đầy đủ (mà Workers có thể kết nối, được tăng tốc bởi Hyperdrive) khi bạn có một khối lượng quan hệ lớn, đã định hình, hoặc cần các tính năng riêng của Postgres mà SQLite không có.

Khi nào Cloudflare D1 là lựa chọn đúng

D1 rất phù hợp khi:

  • Dữ liệu của bạn là quan hệ và hưởng lợi từ truy vấn SQL, join và chỉ mục
  • Bạn xây trên Workers và muốn cơ sở dữ liệu của mình trên cùng một nền tảng
  • Khối lượng của bạn đột biến hoặc từ thấp đến vừa, nên trả theo truy vấn thắng một phiên bản luôn bật
  • Bạn muốn không có gánh nặng vận hành: không cấp phát, vá hay pool kết nối
  • Bạn hài lòng với tập tính năng của SQLite, vốn bao phủ phần lớn nhu cầu ứng dụng

Nó kém phù hợp với các tập dữ liệu rất lớn vượt giới hạn của nó, hoặc các khối lượng phụ thuộc vào tiện ích mở rộng riêng của Postgres. Với những trường hợp đó, hãy kết nối một cơ sở dữ liệu chuyên dụng từ Worker của bạn thay vào đó.

Một trường hợp sử dụng thực tế

Một ứng dụng D1 điển hình: một blog hoặc backend SaaS nhỏ nơi một Worker phục vụ yêu cầu, truy vấn bài viết hoặc bản ghi người dùng từ D1, lưu tệp và hình ảnh tải lên trong R2 , cache các giá trị nóng trong KV, và tùy chọn gọi Workers AI cho một tính năng như tóm tắt. Mọi thứ chạy trên một nền tảng, tại biên, không máy chủ và với hóa đơn co giãn theo mức sử dụng thực tế. Đây cũng chính là mẫu kiến trúc đằng sau hệ thống người dùng Cloudflare Pages mà tôi đã xây.

Quản lý D1 một cách trực quan

Chạy migration và xem dữ liệu qua dòng lệnh thì ổn, nhưng một trình khách đồ họa làm cho công việc hằng ngày nhanh hơn. Ứng dụng máy tính miễn phí Easy Cloudflare D1 của tôi cho phép bạn duyệt cơ sở dữ liệu và bảng, chạy truy vấn, và quản lý dữ liệu D1 của bạn từ một giao diện gọn gàng trên Windows, macOS và Linux, với thông tin xác thực của bạn được mã hóa cục bộ trên chính máy của bạn. Và nếu stack của bạn ghép D1 với KV để caching, ứng dụng miễn phí Easy Cloudflare KV của tôi làm điều tương tự cho các không gian tên khóa-giá trị của bạn.

Những điểm chính

  • D1 là một cơ sở dữ liệu SQL serverless xây trên SQLite, gắn trực tiếp vào Cloudflare Workers
  • Gói miễn phí bao gồm 5 triệu lượt đọc và 100.000 lượt ghi mỗi ngày với 5 GB lưu trữ
  • Tính phí theo dòng đọc và ghi, không theo giờ; cơ sở dữ liệu rảnh rỗi không tốn gì
  • Nó dùng SQL chuẩn với câu lệnh chuẩn bị an toàn, nên đường cong học tập là tối thiểu
  • Dùng KV cho tra cứu khóa-giá trị, D1 cho SQL quan hệ, và Postgres chuyên dụng cho khối lượng nặng hoặc đặc thù tiện ích mở rộng
  • D1 kết hợp với R2, KV và Workers AI để xây các ứng dụng biên hoàn chỉnh

Câu hỏi thường gặp

Cloudflare D1 là gì? D1 là một cơ sở dữ liệu SQL serverless xây trên SQLite, chạy trên mạng lưới của Cloudflare và gắn trực tiếp vào Workers. Bạn viết SQL chuẩn và không bao giờ cấp phát hay quản lý một máy chủ. Cloudflare lo việc lưu trữ, độ bền và mở rộng.

Cloudflare D1 có miễn phí không? Có một gói miễn phí trong gói Workers Free: 5 triệu dòng đọc và 100.000 dòng ghi mỗi ngày, với 5 GB lưu trữ. Nhiều ứng dụng nhỏ chạy hoàn toàn trong các giới hạn này. Gói Workers Paid nâng đáng kể các mức bao gồm.

D1 được định giá thế nào? Bạn trả cho dòng đọc và ghi, không phải cho thời gian hoạt động. Ở gói Paid, 25 tỷ dòng đọc và 50 triệu dòng ghi đầu tiên mỗi tháng được bao gồm, sau đó là 0,001 USD mỗi triệu lượt đọc và 1,00 USD mỗi triệu lượt ghi, với lưu trữ ở mức 0,75 USD mỗi GB-tháng vượt quá 5 GB đầu tiên. Không có phí egress.

Sự khác biệt giữa D1 và KV là gì? KV là một kho khóa-giá trị tối ưu cho việc đọc nhanh một khóa đơn, lý tưởng cho caching và cấu hình. D1 là một cơ sở dữ liệu SQL quan hệ cho dữ liệu có cấu trúc mà bạn muốn truy vấn bằng join, chỉ mục và giao dịch. Dùng KV để tra cứu theo khóa, D1 cho truy vấn quan hệ.

D1 có thể thay thế Postgres không? Với nhiều ứng dụng nhỏ đến vừa, có, vì SQLite bao phủ các nhu cầu quan hệ thông thường. Với các tập dữ liệu rất lớn, khối lượng ghi đồng thời nặng, hoặc các tiện ích mở rộng riêng của Postgres, một cơ sở dữ liệu Postgres chuyên dụng được kết nối từ Worker của bạn (tăng tốc bởi Hyperdrive) là lựa chọn tốt hơn.

Làm thế nào để truy vấn D1 từ một Worker? Gắn cơ sở dữ liệu trong cấu hình wrangler của bạn và truy cập nó qua env.DB. Dùng câu lệnh chuẩn bị với tham số được gắn, ví dụ env.DB.prepare(“SELECT … WHERE id = ?”).bind(id).all(), giúp giữ truy vấn an toàn trước tiêm nhiễm SQL.