สารบัญ
Series: Database 101 — เข้าใจห้องสมุดของเมืองดิจิทัล (ภาษาคน)
Part 0 — WHY: ทำไมต้องมีห้องสมุด
Part 1 — ประวัติ: 4 ยุคของ Database
- EP.02 — ยุค 1960s-70s: Hierarchical → Relational Revolution
- EP.03 — ยุค 1980s-90s: ACID + Enterprise Backbone
- EP.04 — ยุค 2000s-2010s: NoSQL Movement + Big Data
- EP.05 — ยุค 2020s: Cloud-Native + Serverless Database
Part 2 — How: ภายใน Database ทำงานยังไง
- EP.06 — Schema, Normalization, Keys
- EP.07 — Index + Query Optimization
- EP.08 — Transaction + Concurrency Control
Part 3 — เลือก Storage ตามขนาด
- EP.09 — มุมเว็บส่วนตัว: Database-less Architecture
- EP.10 — มุม Personal Data: SQLite + Local-first ← คุณอยู่ตรงนี้
- EP.11 — มุม Startup: Serverless DB Stack
- EP.12 — มุม Enterprise: Polyglot Persistence
Part 4 — Operations
- EP.13 — DBA Role + Privileged Access
- EP.14 — Database Security + Encryption
Part 5 — Future
- EP.15 — Vector Database + AI Era
- EP.16 — Wrap: Decision Tree + 5 Trends
ฉากเปิด: นั่งอยู่บนเครื่องบิน ไม่มีเน็ต — แต่ Notion ยังเปิดได้
ลองนึกภาพ scenario นี้
คุณกำลังบินจากกรุงเทพไปโตเกียว ที่นั่งชั้นประหยัด Wi-Fi บนเครื่องราคา $20 ตัดสินใจไม่จ่าย เปิด laptop กด Notion… เปิดได้ครับ เห็น workspace เห็นทุกบทความ เห็นทุก task เขียนต่อได้ทันที พิมพ์ไปเรื่อยๆ จนเครื่องลง
พอลงเครื่อง เปิดเน็ตที่สนามบินนาริตะ — ไม่ต้องกดปุ่ม sync ไม่ต้องอะไรเลย Notion เห็นเน็ตปุ๊บ ก็ส่งงานที่คุณเขียนบนเครื่องบินขึ้น cloud พร้อมกับดึงงานที่เพื่อนร่วมทีมแก้ในออฟฟิศตอนคุณบินอยู่ — ทุกอย่าง merge กันได้เองโดยไม่ขัดแย้ง
คำถามคือ — ตอนนั่งอยู่บนเครื่องบินไม่มีเน็ต ข้อมูลคุณอยู่ที่ไหน?
EP.09 เราคุยเรื่อง “เว็บที่ไม่มี database” — content static เสิร์ฟจาก edge ไม่มี database ตรงกลาง EP.10 จะ flip มุมตรงข้าม — แทนที่จะไม่มี database เลย เรา ย้าย database มาอยู่บนเครื่องของผู้ใช้ทุกคน แล้วใช้ cloud เป็นแค่จุดนัดพบเวลามีเน็ต
ฟังดูแปลก แต่ที่จริง pattern นี้คุณใช้อยู่ทุกวันอยู่แล้ว แค่ไม่รู้ว่าเบื้องหลังเรียกว่าอะไร
SQLite — database ที่ใช้เยอะที่สุดในโลก แต่ไม่มีใครรู้จัก
ก่อนเข้าเรื่อง local-first ผมขอแนะนำตัวเอกของบทนี้ก่อน — SQLite
ลอง quiz เล็กๆ — database อะไรที่ deploy เยอะที่สุดในโลก? คนส่วนใหญ่นึกถึง MySQL, Oracle, PostgreSQL, MongoDB คำตอบจริงคือ SQLite และไม่ใช่ชนะเฉยๆ — มันชนะแบบขาดลอยจน database อื่นรวมกันยังไม่ถึงครึ่ง
ลองนับคร่าวๆ ว่า SQLite อยู่ที่ไหนบ้าง:
- มือถือทุกเครื่องในโลก — iOS ใช้ SQLite เป็นเบื้องหลังของ Core Data, Android ใช้ SQLite เก็บ contacts, SMS, call log iPhone/Android เครื่องไหนๆ ก็มี SQLite ติดตั้งมาแล้วอย่างน้อย 5-10 ฐานข้อมูล
- Browser ทุกตัว — Chrome, Firefox, Safari, Edge ใช้ SQLite เก็บ history, cookie, bookmark, IndexedDB ทุก tab ที่คุณเปิดอยู่ตอนนี้มี SQLite ทำงานอยู่ใต้ฝา
- Apple ecosystem — Mail.app, iMessage, Photos library, Safari, App Store ทั้งหมดเก็บข้อมูลใน SQLite
- Embedded systems — TV ดิจิทัลตามบ้าน, in-flight entertainment บนเครื่องบิน, ATM ของธนาคาร, GPS ในรถ, set-top box ของเคเบิลทีวี ทั้งหมดมี SQLite อยู่ข้างใน
- Software ที่คุณใช้รายวัน — Adobe Lightroom, Skype, Dropbox client, 1Password, Bear, Things, Evernote — เก็บ metadata ใน SQLite
รวมๆ แล้วมีคนประเมินว่า SQLite รันอยู่บน device เกิน 1 ล้านล้านเครื่อง (trillion) ทั่วโลก เป็น “the most widely deployed database in the world” — ยังไม่มีคู่แข่งที่ใกล้เคียง
แล้วทำไมไม่มีใครพูดถึงล่ะ?
คำตอบคือ — เพราะมัน embedded มันไม่ได้รันเป็น server ที่ต้องตั้งชื่อ ตั้ง port ตั้ง user/password ไม่มีคนเป็น DBA ดูแล มันแค่… ฝังอยู่กับ app เงียบๆ ทำงานของมันไป จนคุณไม่รู้ว่ามันมีตัวตน
SQLite ต่างจาก server database ยังไง
9 EP ที่ผ่านมา เราคุยเรื่อง database แบบ “server” หมด — MySQL, PostgreSQL, MongoDB, Oracle ทุกตัวเป็น process ที่ต้องเปิดทิ้งไว้ตลอดเวลา รับ connection จาก app คนละเครื่อง ทำงานเป็นบริการกลาง
SQLite ไม่ใช่แบบนั้น มันต่างกันคนละโลก:
1. Single file — database ทั้งตัวคือไฟล์เดียว นามสกุล .db หรือ .sqlite ขนาด 100KB ถึง 100GB ก็ได้ จะ backup ก็ copy ไฟล์ จะย้ายเครื่องก็ส่งไฟล์ผ่าน USB ได้เลย ไม่มี dump/restore ให้ปวดหัว
2. Embedded — ไม่มี server process — SQLite เป็น library ที่ link เข้ากับ app ตอน compile app เรียก SQLite เหมือนเรียก function ปกติ ไม่ต้องเปิด network connection ไม่มี TCP/IP, ไม่มี port, ไม่มี authentication — เพราะไม่มีใครเข้ามาจาก network ได้อยู่แล้ว
3. Zero-configuration — ไม่มีไฟล์ config ให้แก้ ไม่มีไฟล์ user/password ไม่ต้องตั้ง memory size ไม่ต้องตั้ง connection pool — copy ไฟล์มา open ก็ใช้ได้ ใหม่หรือเก่า มือถือหรือ desktop เหมือนกันหมด
4. Cross-platform single file — ไฟล์ .db ตัวเดียวกัน อ่านได้ทั้งบน Windows, Mac, Linux, iOS, Android, browser (ผ่าน WebAssembly) ไม่มี endianness ไม่มี version mismatch ที่ขยับเครื่องแล้วเปิดไม่ออก
อุปมาง่ายๆ:
- Server database (MySQL, PostgreSQL) เหมือน ตู้เซฟในธนาคาร — ของคุณอยู่ในนั้น แต่จะดูทีต้องเดินทางไปธนาคาร แสดง ID เซ็นชื่อ รอเจ้าหน้าที่หยิบให้ ปลอดภัย ใช่ แต่ทุกการเข้าถึงต้องผ่าน gatekeeper
- SQLite เหมือน ตู้เก็บของในห้องคุณเอง — เปิดเมื่อไหร่ก็ได้ หาของได้ทันที ไม่ต้องขอใคร แต่ก็ไม่ได้ออกแบบให้คน 100 คนเข้ามาเปิดพร้อมกัน
ไม่ใช่ว่าตัวไหนดีกว่าตัวไหนนะ — เป็น tool คนละงาน SQLite ออกแบบมาเพื่อ “1 app, 1 device, 1 user” server DB ออกแบบเพื่อ “หลาย app, หลาย device, หลาย user พร้อมกัน”
มุมผู้บริหาร: ถ้า product ของคุณมีคนใช้ทีละคน (mobile app, desktop app, browser extension) — อาจไม่ต้องการ database server เลย SQLite ทำงานได้ดีกว่า ถูกกว่า ง่ายกว่ามาก
The Local-first Movement — ปรัชญาของยุคใหม่
ปี 2019 research lab ชื่อ Ink & Switch ออก paper ชื่อ “Local-first software: You own your data, in spite of the cloud” paper นี้กลายเป็น manifesto ของขบวนการที่กำลังโตขึ้นเรื่อยๆ ในวงการ software design
ก่อนเข้าหลักการ ขอ context ก่อน — ยุค 2010s เป็นยุคของ cloud-first Google Docs, Dropbox, Slack, Notion, Figma ทุกอย่างย้ายขึ้น cloud หมด ดูเหมือนจะดี: ทำงานได้จากทุกเครื่อง sync อัตโนมัติ ไม่ต้องห่วง backup
แต่พอใช้ไปนานๆ คนเริ่มเห็นด้านมืด:
- Wi-Fi ไม่ดี = แอปทำงานไม่ได้ (loading spinner หมุนตลอด)
- บริษัทเจ้าของแอปปิดตัว = ข้อมูลคุณหายไปด้วย (Google Reader, Google+, Wunderlist เคยเกิดมาแล้ว)
- ค่ารายเดือนเพิ่มทุกปี
- ข้อมูลส่วนตัวอยู่บน server คนอื่น = leak ได้ รัฐบาลเรียกตรวจได้ AI เอาไปเทรนได้
Local-first คือการ pushback ว่า — “เดี๋ยวก่อน ข้อมูลของฉัน ทำไมต้องอยู่บน serverของคนอื่น?”
7 หลักการของ local-first (สรุปสั้นๆ):
1. No spinners — UI ไม่ต้องรอ network — กดปุ่ม = เห็นผลทันที ไม่ต้องรอ server ตอบกลับ เพราะ data อยู่ในเครื่องคุณแล้ว
2. Your work is not trapped on one device — ข้อมูลเดียวกันใช้ได้บนทุกเครื่องของคุณ แต่ไม่ใช่เพราะ “อยู่ใน cloud” — เพราะ sync ระหว่างเครื่องของคุณเอง
3. Network optional — ทำงานได้เต็มที่ตอน offline ออนไลน์เป็นแค่ enhancement ไม่ใช่เงื่อนไข
4. Seamless collaboration — ทำงานพร้อมกันหลายคนได้ แม้บางคน offline merge เข้ากันเองได้เมื่อทุกคนกลับมาออนไลน์
5. The Long Now — ข้อมูลที่อยู่ได้ 100 ปี — ไฟล์ในเครื่องคุณเปิดได้เสมอ ไม่ขึ้นอยู่กับว่าบริษัทไหนยังอยู่ หรือ format ไหนยัง support
6. Privacy by default — ข้อมูลที่ไม่ต้องส่งไป server = ไม่มีใครแอบดูได้ การ sync ใช้ end-to-end encryption — server เห็นแต่ข้อมูลที่อ่านไม่ออก
7. You retain ultimate ownership — คุณมี copy ของข้อมูลทุกอันเสมอ ไม่ใช่แค่ “view” ของข้อมูลที่บริษัทเก็บไว้
สังเกตว่า — 7 ข้อนี้ ไม่ใช่เรื่องเทคนิค มันเป็นเรื่อง ความสัมพันธ์ระหว่างคุณกับ software ที่คุณใช้ จาก “เช่าใช้ของบริษัท” → “ของของคุณเอง”
มุมผู้บริหาร: ถ้า product เป็น productivity tool ที่ผู้ใช้ลงทุนเวลาเก็บข้อมูลส่วนตัว/งานสำคัญ — local-first เป็น differentiator ใหญ่กว่าฟีเจอร์ใดๆ คนยอมจ่ายแพงกว่าเพื่อ “ของฉัน อยู่กับฉัน”
CRDT — เทคนิคที่ทำให้ sync แบบไม่ขัดแย้งเป็นไปได้
ฟังหลักการ local-first แล้วอาจเอ๊ะ — “ถ้า 2 คนแก้เอกสารเดียวกันตอน offline ทั้งคู่ พอ online ตอนเดียวกัน — ใครชนะ?”
คำตอบของยุคก่อนคือ — conflict ขึ้น modal “Version conflict — choose: keep mine / keep theirs / merge manually” ใครเคยใช้ Dropbox ปี 2010s น่าจะคุ้น
คำตอบของยุค local-first คือ — CRDT (Conflict-free Replicated Data Type)
CRDT เป็น โครงสร้างข้อมูลแบบใหม่ ที่ออกแบบมาเพื่อ merge ได้เอง 100% โดยไม่ต้องถามผู้ใช้ ไม่ว่ากี่คนแก้ ไม่ว่าแก้ตอนไหน ผลลัพธ์สุดท้ายเหมือนกันเสมอเมื่อทุกคน sync ครบ
อุปมาง่ายๆ — ลอง 2 คนที่อยู่ห้องคนละห้อง ต่างคนต่างมีกระดาษ shopping list ใบเดียวกัน
- คน A เพิ่ม “นม” + ลบ “ขนมปัง”
- คน B เพิ่ม “ไข่” + ลบ “ขนมปัง”
ตอนเดินมาเจอกัน ทั้งคู่มี list ต่างกัน — แต่ถ้าใช้ CRDT logic ผลลัพธ์ที่ถูกคือ list ที่มี “นม + ไข่” และ “ขนมปัง” หายไป (เพราะทั้งคู่เห็นพ้องว่าลบ) เป็นแบบนี้เสมอ ไม่ว่าใครเดินมาก่อน
ตัวอย่างที่คุณใช้อยู่ทุกวัน:
- Apple Notes — เปิดบน iPhone แก้ระหว่างเดินทาง พอ iPad เปิดที่บ้าน sync ทันที ถ้าคุณกับเพื่อนแก้คนละบรรทัดของ note เดียวกัน ทั้งสองส่วนรอดทั้งคู่
- Apple Reminders, Calendar — เหมือนกัน CRDT-based sync
- Linear — task management ของบริษัท startup ที่ engineer ทั่วโลกพูดถึง engineering team ของ Linear เขียน blog หลาย post อธิบายว่าออกแบบ sync engine แบบ CRDT ยังไง
- Figma — multi-cursor real-time design tool ที่ทุก designer ใช้ เบื้องหลังเป็น CRDT-like algorithm
- Automerge, Yjs — open-source CRDT libraries ที่ developer ใช้สร้าง local-first app
ส่วน Google Docs ใช้เทคนิคคนละแบบชื่อ Operational Transform (OT) คล้ายกันแต่ซับซ้อนกว่า และต้องมี central server ตัดสินใจ ต่างจาก CRDT ที่ทำงานแบบ peer-to-peer ได้
มุมผู้บริหาร: CRDT คือ enabling technology ที่ทำให้ “offline + collaborative” เกิดพร้อมกันได้ ก่อนหน้านี้ต้องเลือก — เอา offline (Dropbox style, conflict ง่าย) หรือเอา collaborative (Google Docs style, ต้อง online ตลอด) CRDT บอกว่า “เอาทั้งสองได้ครับ”
Cloudflare D1 — SQLite distributed บน edge
พอ SQLite + local-first กลายเป็นที่นิยม cloud vendor ใหญ่ๆ เริ่มเข้ามาในตลาด
Cloudflare D1 คือบริการของ Cloudflare ที่ตอบโจทย์ — “อยากใช้ SQLite ที่ scale ได้ระดับโลก ทำยังไง”
แนวคิด D1 เรียบง่าย:
- ใช้ SQLite ตัวเดิม (ไม่ใช่ database engine ใหม่) — ecosystem, syntax, tooling เดิมหมด
- replicate ไฟล์ database ไปทั่ว edge network ของ Cloudflare 300+ เมือง
- การ อ่าน ทำได้จาก edge ที่ใกล้ user ที่สุด — latency ต่ำมาก (10-30ms)
- การ เขียน ส่งไปที่ primary region แล้ว replicate ไปที่อื่น — เขียนช้ากว่าอ่านเล็กน้อย
ผลคือ — ได้ database ที่ “ใกล้ user เสมอ” ในการอ่าน ซึ่งสำหรับเว็บส่วนใหญ่ที่ “อ่าน 99% เขียน 1%” = เหมาะมาก
ราคาด้วย — free tier ใจดีมาก 5GB storage + 25 ล้าน row read ต่อเดือน + 50,000 row write ต่อวัน เพียงพอสำหรับ side project, blog, small SaaS
ใช้คู่กับ Cloudflare Workers (function ที่รันบน edge) = full-stack app ที่รันทั่วโลกโดยไม่ต้องมี server เลย จ่ายตามที่ใช้ ไม่มี idle cost
Turso, LiteFS — SQLite ที่ replicate ระดับ edge
Cloudflare ไม่ใช่เจ้าเดียวในตลาดนี้ ปี 2023-2024 มี vendor หลายเจ้าเข้ามาแข่ง:
Turso — startup ที่ fork SQLite ออกมาเป็น libSQL เพิ่ม feature ที่ SQLite ดั้งเดิมไม่มี เช่น embedded server mode (มี SQLite รันใกล้ๆ app เป็น sidecar), replication built-in, vector search. Turso มี free tier ใจดีคล้ายๆ D1 และเน้นกลุ่ม developer ที่อยาก deploy SQLite ระดับ global โดยไม่ต้องเขียน infrastructure เอง
LiteFS — open-source project ของ Fly.io ใช้ FUSE filesystem layer ดักจับการเขียนไฟล์ SQLite แล้ว replicate ไปยัง replica ทั่วโลก ข้อดีคือ — ไม่ต้องแก้ code app เลย app ยังเขียน SQLite แบบเดิม LiteFS ทำหน้า replication ให้ใต้ฝา
rqlite, dqlite — distributed SQLite อีก 2 ตัวที่อยู่ในวงการมานานกว่า เน้น HA (high availability) มากกว่า edge replication
ที่น่าสังเกตคือ — ทำไมทุก vendor edge cloud (Cloudflare, Fly.io, Turso, Vercel เริ่มเข้าตลาดด้วย Vercel Postgres for Edge) วิ่งเข้าหา SQLite พร้อมกัน?
คำตอบสั้นๆ — architecture ของ edge ต้องการ database ที่ embedded เพราะ Postgres/MySQL แบบ traditional มี connection pool, TCP handshake, authentication overhead ที่ “เปิด connection ใหม่ทุก request” ไม่ practical แต่ SQLite = open file ก็ใช้ได้ เหมาะกับ serverless/edge ที่ทุก function เปิด-ปิดเร็วๆ
เคสที่เหมาะกับ local-first
ทีนี้มาดูว่า pattern นี้เหมาะกับ product แบบไหน:
1. Note-taking apps — คนใช้รายวัน, ต้องเปิดเร็ว, ต้องมีแม้ตอน offline
- Notion — sync engine ใหม่ (2021+) เป็น local-first
- Obsidian — markdown file บนเครื่องคุณ + sync เป็น add-on
- Apple Notes, Bear, Things — local-first by default
2. Task / project management
- Linear — sync engine ดังในวงการ engineer มี blog post เล่ารายละเอียดเทคนิค
- Things, OmniFocus — local-first ตั้งแต่แรก
3. Journal / Diary
- Day One — บันทึกส่วนตัวที่คนไม่อยากให้อยู่บน server ของคนอื่น
4. Expense tracker / Personal finance
- Copilot, MoneyMoney — ข้อมูลการเงินที่ sensitive เก็บใน local เท่านั้น sync ผ่าน iCloud/Dropbox ที่ encrypt แล้ว
5. Code editor
- VS Code — code อยู่ในเครื่องคุณ settings sync ขึ้น cloud (เป็น metadata เล็กๆ ไม่ใช่ data หลัก)
6. Mobile-first product
- ทุกอย่างที่ “user คาดหวังว่าเปิดบนรถไฟใต้ดินที่ไม่มีสัญญาณก็ต้องใช้ได้”
Pattern ที่เห็นในเคสเหล่านี้คือ — data เป็นของ user, ไม่ต้อง share กับคนอื่นเป็นหลัก, scenario offline เกิดขึ้นจริง
เคสที่ “ไม่เหมาะ” — ยังต้องมี central database
แต่อย่าเพิ่งคิดว่า local-first คือคำตอบของทุกอย่างนะ มีหลายเคสที่ central database ยังจำเป็นมาก:
1. Banking / Fintech — เงินในบัญชีคุณ ต้อง มี single source of truth บน server ของธนาคาร ห้ามมีหลาย version ที่ต้อง merge เพราะถ้า merge ผิด = เงินหาย/เพิ่มผิด เคส EP.08 ที่เคยคุยเรื่อง transaction integrity ก็ตรงนี้แหละ
2. Multi-tenant SaaS ที่มี admin view — ถ้า admin ต้องเห็นข้อมูลของ user 10,000 คนพร้อมกัน data จะอยู่บนเครื่อง admin ไม่ practical ต้องมี central DB ให้ admin query
3. Social network / Feed — feed Twitter/Facebook ที่ต้องเห็นโพสต์จากคนทั่วโลกแบบ real-time จะให้ทุกคนเก็บ copy ของ feed ทั้งโลกในเครื่อง = ทำไม่ได้
4. E-commerce — inventory + order — สต็อกสินค้าต้อง consistent ระหว่างหลาย channel (เว็บ + LINE + ร้านหน้าร้าน) ถ้าขายของชิ้นเดียวกันให้ลูกค้า 2 คนพร้อมกันเพราะ stock ไม่ sync = ปัญหาใหญ่
5. Real-time multiplayer game — game state ต้องอยู่ที่ server กลาง ป้องกัน cheat และ sync ระหว่างผู้เล่น
เส้นแบ่งคล้ายๆ EP.09 — ถ้า data เป็น “ของ user” → local-first เวิร์ก. ถ้า data เป็น “ของระบบ” หรือ “shared resource” → ต้องมี central
มุมผู้บริหาร — ทำไม mobile-first product 2026 ต้องคิด local-first ตั้งแต่ day 1
ถ้ากำลังจะสร้าง product ใหม่ที่เป็น mobile app หรือ desktop app ที่ user ใช้ส่วนตัว — ผมอยากชวนให้พิจารณา local-first ตั้งแต่วันแรก ด้วยเหตุผล 4 ข้อ:
1. Cost — ลด server cost มหาศาล — server ไม่ต้องรับ traffic ทุก action ของ user (ทุกการพิมพ์ ทุกการ tap) รับเฉพาะตอน sync เท่านั้น ราคาต่อ user ลดเป็น order of magnitude
2. UX — ไม่มี loading spinner = better experience — UI ตอบสนองทันทีทุกครั้ง ไม่มี “เน็ตช้า แอปก็ช้า” ที่ลูกค้าโทษคุณ ทั้งที่จริงเป็นเน็ตของเขาเอง
3. Privacy + trust — ข้อมูลที่ไม่อยู่บน server ของคุณ = leak ไม่ได้ ผู้ใช้ที่กังวลเรื่อง privacy (กลุ่มที่โตเร็วทุกปี) จะ trust product ที่ “ของฉัน อยู่กับฉัน” มากกว่า
4. Compliance ง่ายขึ้น (PDPA / GDPR / data residency) — กฎหมายความเป็นส่วนตัวทั่วโลกซับซ้อนขึ้นทุกปี local-first ลดภาระตรงนี้เพราะ “data ที่ไม่เก็บ = ไม่ต้อง comply”
ที่สำคัญคือ — local-first ไม่ได้แปลว่าไม่มี cloud แปลว่า cloud เป็น sync layer ไม่ใช่ source of truth ผู้ใช้ยังได้ประโยชน์ของ cloud (sync ข้ามเครื่อง, backup, collaboration) แค่ไม่ใช่ “เช่าข้อมูลตัวเองจากเรา”
product ที่ออกแบบ local-first ตั้งแต่ day 1 ทำได้ง่าย product ที่จะ retrofit local-first เข้าไปทีหลัง = rewrite เกือบทั้ง app เพราะ assumption เรื่อง “data อยู่บน server” มันแทรกอยู่ทุกที่
ปิดท้าย — เว็บ → app → SaaS เริ่มเป็นภาพชัดขึ้น
ถึงตรงนี้ลองวาง 2 ตอนไว้ข้างกัน
EP.09 พูดเรื่อง เว็บที่ไม่มี database — content site เสิร์ฟจาก edge ทั่วโลก ทุกอย่าง pre-built ไม่ต้องมี server กลาง
EP.10 พูดเรื่อง app ที่ database อยู่บนเครื่อง user — Notion, Linear, Obsidian, Apple Notes ที่ทำงานได้ตอน offline แล้ว sync ตอนมีเน็ต
ทั้ง 2 มาจาก idea เดียวกัน — เลิกพึ่ง database server กลางเป็นจุดเดียว กระจายออกไป บางทีไป edge บางทีไปเครื่อง user
แต่ทั้ง 2 pattern เหมาะกับ product ขนาดเล็ก-กลาง ที่ user ทำงานคนเดียวเป็นหลัก ถ้า product โตขึ้น มี user เป็น 10,000 คน ใช้พร้อมกัน มีทีม admin ที่ต้อง query ข้อมูลข้าม user มี analytics dashboard ที่ต้องอัปเดตทุกวินาที — ตอนนั้นต้องการ database แบบไหน?
EP.11 จะคุยเรื่อง — Serverless DB Stack สำหรับ startup — เครื่องมืออะไรที่ทำให้ทีม engineer 3 คน รัน SaaS ที่มี user เป็นหมื่นได้โดยไม่ต้องจ้าง DBA Neon, PlanetScale, Supabase, Cloudflare D1, Turso — vendor พวกนี้แข่งกันยังไง เลือกตัวไหนดีในสถานการณ์ไหน