ทำไมต้อง Database (ไม่ใช่ Excel)
เปรียบเทียบ Excel กับ database จริง เห็นว่าทำไมเก็บข้อมูลลูกค้าหลักหมื่นใน Excel ถึงไม่ไหว
Vibe Mart เป็นร้านขายของชำออนไลน์ที่เพิ่งเปิด วันแรกมีลูกค้า 50 คน และคำสั่งซื้อ 200 รายการ ทีมเล็กๆ เลยเก็บทุกอย่างไว้ในไฟล์ customers.xlsx ตอนนั้นใช้ได้สบายๆ แต่พอผ่านไปครึ่งปี ลูกค้าโตเป็นหลักแสน คำสั่งซื้อเพิ่มทุกชั่วโมง ปัญหาเริ่มทยอยตามมาเป็นชุด
Excel ก็น่าจะพอ จริงไหม
ตอนลูกค้าหลักร้อย Excel เปิดได้สบาย กด Ctrl+F ค้นเจอภายในวินาทีเดียว แต่พอเพิ่มเป็นแสนคน เปิดไฟล์ต้องรอเป็นนาที กด Ctrl+F ก็รอเพิ่มอีกหลายวินาที ที่หนักกว่านั้นคือเวลาแอดมิน 2 คนแก้ไฟล์เดียวกันพร้อมกัน คนที่ save ทีหลังจะทับงานของอีกคนทันที
ลองเลื่อน slider ด้านล่างดู ตอน Vibe Mart มีข้อมูลเยอะขึ้นเรื่อยๆ จะเห็นว่าเวลาที่ Excel กับ Database ใช้ห่างกันมากขึ้นเรื่อยๆ
ทำไม Database ถึงเร็วกว่ามาก
Excel ค้นหาด้วยการเปิดทีละแถวไปเรื่อยๆ จนกว่าจะเจอชื่อที่ตรง ถ้าตารางมี 1 ล้านแถว ก็ต้องเปิดดูครบล้านครั้ง ส่วน Database มีตัวช่วยที่เรียกว่า index ซึ่งทำงานเหมือน index ท้ายหนังสือ อยากหาคำว่า "ปอนด์" ก็เปิด index ดูก่อนว่าอยู่หน้าไหน แล้วกระโดดไปหน้านั้นเลย ไม่ต้องไล่อ่านทั้งเล่ม
ผลคือเวลาที่ Database ใช้เพิ่มน้อยมาก แม้ข้อมูลจะโตขึ้นเยอะแค่ไหน จาก 100 แถวไปเป็นล้านแถว เวลาเพิ่มเพียงไม่กี่ ms ในขณะที่ Excel กระโดดจากวินาทีเดียวเป็นหลายนาที
สิ่งที่ Excel ทำไม่ได้
- หลายคนแก้พร้อมกัน: Database รองรับให้แอดมิน 100 คนเพิ่ม order พร้อมกันได้ โดยไม่มีใครงานหาย ส่วน Excel แม้ cloud version จะแก้พร้อมกันได้ แต่ก็ไม่ได้ออกแบบมารับโหลดระดับแอดมินหลายสิบคนกดพร้อมกัน งานทับกันง่าย
- Transaction: โอนเงินจากบัญชี A ไป B ต้องสำเร็จทั้งคู่หรือล้มทั้งคู่ ห้ามครึ่งๆ กลางๆ Database มีคำสั่ง
BEGIN,COMMIT,ROLLBACKให้ใช้ ส่วน Excel ไม่มีแบบนี้ - Constraint: ห้ามมี email ซ้ำ ห้ามมี user_id ที่ไม่ได้อยู่ในตาราง users Database จะปฏิเสธตั้งแต่ตอน insert ส่วน Excel ปล่อยให้พิมพ์อะไรลงไปก็ได้
- กู้คืน: ถ้าไฟดับตอน save Database มี Write-Ahead Log ที่กู้กลับมาได้ ส่วน Excel ไฟล์อาจพังทั้งก้อน
สรุปบทนี้
- Database คือ service ที่จัดการข้อมูลเป็นล้านแถวได้ในเวลาแค่ ms
- Index ทำให้ค้นหาเร็ว เพราะไม่ต้องเปิดทุกแถว
- Database รองรับหลายคนใช้พร้อมกัน และมี constraint กับ transaction ที่ Excel ไม่มี
- SQL คือภาษาที่เราใช้คุยกับ database จะเรียนต่อในบทถัดไป