~/VibeHandbook
PDF ฟรี

Cloudflare

developers.cloudflare.com

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