Workers KV
มันคืออะไร
ลองนึกถึงพจนานุกรมเล่มใหญ่: คุณค้นหาคำศัพท์ (คีย์, key) แล้วได้คำนิยาม (ค่า, value) กลับมาทันที Workers KV คือที่เก็บข้อมูลแบบคีย์-ค่า (KV, key-value) ระดับโลกที่สร้างขึ้นมาแบบนั้น และออกแบบมาเพื่อการอ่านโดยเฉพาะ คุณเขียนค่าครั้งเดียว แล้ว Cloudflare จะคัดลอกข้อมูลนั้นไปทั่วทั้งเครือข่ายของมัน เพื่อให้ Worker ตัวไหนก็ตาม ที่ไหนก็ได้ สามารถอ่านข้อมูลได้ด้วยความหน่วง (latency) ต่ำมาก (แทบไม่ต้องรอ) มันมีความสอดคล้องแบบ eventually consistent (สอดคล้องกันในที่สุด): หลังจากเขียนข้อมูล ค่าใหม่จะปรากฏให้เห็นทุกที่ภายในช่วงเวลาสั้น ๆ ความล่าช้าสั้น ๆ นั้นคือสิ่งที่ต้องแลกมาเพื่อความเร็วและการกระจายไปทั่วโลก
จุดแข็ง
- อ่านข้อมูลได้เร็วมาก ความหน่วงต่ำ จากทุกที่บน
- กระจายไปทั่วโลกโดยอัตโนมัติ — ไม่ต้องจัดการภูมิภาคเอง
- (Application Programming Interface — ชุดคำสั่งเล็ก ๆ ที่คุณเรียกใช้) ที่เรียบง่าย:
get,put,delete,listพร้อมตัวเลือก TTL (Time To Live — ระยะเวลาที่ค่าถูกเก็บไว้ก่อนจะหมดอายุโดยอัตโนมัติ) - ราคาถูกเมื่อใช้งานในปริมาณมาก สำหรับงานที่เน้นการอ่านเป็นหลัก มีระดับใช้งานฟรี
- เชื่อมต่อเข้ากับ Workers และ Pages Functions ได้โดยตรง
ข้อแลกเปลี่ยน
- มีความสอดคล้องแบบ eventually consistent — ไม่เหมาะกับข้อมูลที่ต้องถูกต้องทันทีหลังการเขียน
- การเขียนช้ากว่าและถูกจำกัดอัตรา (rate-limited) เมื่อเทียบกับการอ่าน
- ขนาดของค่าถูกจำกัด (ประมาณ 25 MB) ไม่ใช่ที่เก็บข้อมูลจำนวนมากแบบ R2
- ไม่มีการคิวรี (query) หรือความสัมพันธ์ระหว่างข้อมูล — เป็นเพียงคีย์ต่อค่าล้วน ๆ
เมื่อไหร่ควรใช้
ใช้ KV สำหรับการตั้งค่า (configuration), feature flags, การแคชผลลัพธ์จาก API, ตารางการกำหนดเส้นทาง (routing tables), การค้นหาเซสชัน และข้อมูลที่เน้นการอ่านเป็นหลักซึ่งคุณยอมรับได้ว่าอาจเก่ากว่าความจริงไปสักสองสามวินาที
เข้ากับ vibe coding อย่างไร
KV เป็นตัวเลือกที่ง่ายและคุ้มค่าสำหรับ ที่ต้องการเพิ่มการแคชหรือการตั้งค่าให้กับ Worker: แค่ผูก binding เดียว แล้วใช้ get/put ได้เลย ควรบอกให้ชัดเจนว่ามันเป็นแบบ eventually consistent เพื่อไม่ให้ agent เลือกใช้ KV ในกรณีที่ต้องการการรับประกันแบบอ่านข้อมูลได้ทันทีหลังเขียน (read-after-write) — ให้ชี้ไปที่ D1 หรือ Durable Object แทนสำหรับกรณีนั้น ตัวอย่างโค้ดด้านล่างนี้ผูก namespace และใส่ค่าเริ่มต้น
# wrangler.toml
[[kv_namespaces]]
binding = "CONFIG"
id = "your-kv-namespace-id"
npx wrangler kv namespace create CONFIG
npx wrangler kv key put --binding=CONFIG "theme" "dark"