D1
มันคืออะไร
ลองนึกถึงสเปรดชีตที่มีแถวและคอลัมน์เรียบร้อย ที่แอปของคุณสามารถถามคำถามที่เจาะจงได้ เช่น "แสดงคำสั่งซื้อที่ชำระเงินแล้วทั้งหมดในเดือนมิถุนายน" D1 คือฐานข้อมูล แบบเซิร์ฟเวอร์เลส () ของ Cloudflare — คลังตารางข้อมูลที่จัดระเบียบและสืบค้นได้แบบนั้น — สร้างขึ้นบน SQLite ("เซิร์ฟเวอร์เลส" หมายความว่าไม่มีเซิร์ฟเวอร์ให้คุณต้องตั้งค่าหรือคอยดูแลให้ทำงานอยู่ ผู้ให้บริการจัดการเรื่องนั้นทั้งหมดแทนคุณ) SQL (Structured Query Language หรือ ภาษาสำหรับสอบถามข้อมูลเชิงโครงสร้าง) คือภาษามาตรฐานสำหรับการถามคำถามกับฐานข้อมูล คุณสร้างฐานข้อมูลขึ้นมา ผูก (bind) มันเข้ากับ Worker หรือโปรเจกต์ Pages แล้วสืบค้นด้วยภาษา SQL ธรรมดาผ่าน (Application Programming Interface — ชุดคำสั่งที่คุณเรียกใช้) ของ JavaScript ขนาดเล็ก ไม่มีเซิร์ฟเวอร์ให้ต้องกะขนาด ไม่มี connection pool (กลุ่มการเชื่อมต่อ) ให้ต้องบริหารจัดการ — Cloudflare ดูแลเรื่องพื้นที่จัดเก็บ การทำสำเนา (replication) และการขยายขนาดให้ทั้งหมด และคุณจ่ายเงินตามจำนวนแถวที่อ่านและเขียน
จุดแข็ง
- SQL ของจริง (สำเนียง SQLite) — คำสั่งที่คุ้นเคยอย่าง
SELECT,JOIN, ธุรกรรม (transaction), และดัชนี (index) - เซิร์ฟเวอร์เลส: ไม่ต้องจัดสรรทรัพยากรล่วงหน้า ไม่มีขีดจำกัดการเชื่อมต่อ ขยายลงจนถึงศูนย์ได้เมื่อไม่มีการใช้งาน
- เชื่อมต่อแนบแน่นกับ Workers และ Pages ผ่านการผูก (binding) เพียงจุดเดียว
- การทำสำเนาสำหรับอ่าน (read replication) วางสำเนาไว้ใกล้ผู้ใช้เพื่อให้อ่านข้อมูลได้เร็ว
- ราคาถูกสำหรับปริมาณงานของแอปทั่วไป พร้อมแพ็กเกจฟรีที่ใช้งานได้จริง
ข้อแลกเปลี่ยน
- ยึดตามพฤติกรรมของ SQLite: ชุดข้อมูลขนาดมหึมาและการเขียนพร้อมกันในปริมาณสูงมากไม่ใช่จุดแข็งของมัน
- ขีดจำกัดขนาดต่อฐานข้อมูลหนึ่งชุด หมายความว่าข้อมูลขนาดใหญ่มากอาจต้องแบ่งย่อย (sharding — การกระจายข้อมูลไปยังหลายฐานข้อมูล) หรือใช้ R2 (บริการจัดเก็บไฟล์ของ Cloudflare) แทน
- ใหม่กว่า Postgres/MySQL ดังนั้นเครื่องมือและระบบนิเวศรอบข้างยังอยู่ระหว่างการเติบโต
- เข้าถึงได้ดีที่สุดจากขอบเครือข่าย () การใช้งานจากภายนอก Cloudflare จะไม่คล่องตัวเท่า
เมื่อไหร่ควรใช้
เลือก D1 สำหรับข้อมูลของแอปในโปรเจกต์ที่โฮสต์บน Cloudflare เช่น ข้อมูลผู้ใช้ เนื้อหา การตั้งค่า ข้อมูลเมตาของเซสชัน — สิ่งใดก็ตามที่เข้ากับโมเดลเชิงสัมพันธ์ (relational model) และอยู่ร่วมกับแอป Workers หรือ Pages ของคุณ
เข้ากันได้ดีกับ vibe coding แค่ไหน
D1 เป็นตัวเลือกเริ่มต้นที่ดีเมื่อเอเจนต์กำลังสร้างงานบน Workers อยู่แล้ว เพราะฐานข้อมูล สคีมา (schema) และคำสั่งสืบค้นทั้งหมดอยู่ในโปรเจกต์เดียวกัน ให้บอกเอเจนต์ให้เก็บ migration (ไฟล์การเปลี่ยนแปลงโครงสร้างฐานข้อมูล) ไว้ในไฟล์ .sql ที่มีเลขเวอร์ชันกำกับ แล้วนำไปใช้ด้วย Wrangler เพื่อให้สคีมาสร้างซ้ำได้เสมอ การผูก (binding) ทำให้การสืบค้นเหลือแค่บรรทัดเดียวภายในตัวจัดการ (handler)
# 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