Technology

Database 101 : Spreadsheet ไม่ใช่ Database โว้ยยยย

By Arnon Puitrakul - 19 สิงหาคม 2024

Database 101 : Spreadsheet ไม่ใช่ Database โว้ยยยย

บทความนี้ เราเขียนสำหรับมือใหม่ หรือคนที่ไม่ได้เรียนด้านนี้แต่อยากรู้ละกัน สำหรับวันนี้เรามาพูดถึงคำที่ถ้าเราทำงานกับพวก Developer เขาคุยกันบ่อย ๆ ใช้งานกันเยอะ ๆ อย่าง Database กันว่า มันคืออะไร ทำไมเราต้องใช้ และ เราจะมีตัวเลือกอะไรในการใช้งานบ้าง

Database คืออะไร ?

สิ่งที่มันเป็น มันเป็นไปตามชื่อของมันเป๊ะ ๆ เลยนะ คือ Database หรือที่ ๆ เราใช้เก็บข้อมูล ที่ทำให้เราสามารถเก็บ และ เข้าถึงข้อมูลของเราได้ง่ายขึ้น มันเป็นแค่คำกว้าง ๆ คำนึงเท่านั้นแหละ

อาจจะยังไม่เห็นภาพ เราลองมาจำลองกันดีกว่า สมมุติว่า เราเป็นโรงพยายาบาลสักที่นึง ในนั้น เราจะต้องมีการเก็บข้อมูลเยอะมาก ๆ เช่น ข้อมูลของตัวบุคลลากรเอง หรือ คนไข้ อะ เขามาวันไหน เจอใคร ทำอะไรบ้าง หมอสั่งยาอะไร เภสัชจ่ายยาอะไรให้ไปใช่ปะ หรือถ้าเป็นพวกธุรกิจ ก็อาจจะต้องเก็บว่า เราซื้อขายอะไรไปบ้าง ซื้อเข้าเท่าไหร่ ขายไปเท่าไหร่ นี่แหละ คือสิ่งที่ Database มันทำ คือ เก็บข้อมูล

โดยทั่ว ๆ ไป Database มันจะทำงานคนเดียวไม่ได้ ไม่งั้น มันก็จะเป็นก้อนข้อมูลที่อยู่เฉย ๆ ไม่รู้จะทำงานกับมันยังไง ทำให้มันต้องมี Database Management System (DBMS) เข้ามาช่วยเหลือ ในการเข้าถึง และ จัดการข้อมูล รวม ๆ เราจะเรียกว่า Database System แต่แหม่ มันยาวไปหน่อย เราเลยพูดย่อ ๆ ไปแค่ว่า Database ก็คือ เราจะรวบตึงทั้งข้อมูล และ ส่วนที่เป็น DBMS เข้าด้วยกันไปเลย

ตัว Database เอง จริง ๆ ก็ไม่ได้เป็นเรื่องใหม่อีกเหมือนกัน มันเกิดขึ้นช่วงประมาณ 1960 ตอนนั้น เรามี Database พวกที่เป็นกลุ่ม Hierarchical Database หรือเป็นพวกที่เก็บข้อมูลเหมือน Tree หรือพูดง่าย ๆ ถ้าคนที่เรียน Database มาหน่อย ก็คือ มันอนุญาติให้มีแค่ One-to-Many Relationshop จน 20 ปีผ่านไปช่วง 1980 เราเริ่มมีสิ่งที่เรียกว่า Relational Database ที่เน้นไปที่ความสัมพันธ์ของข้อมูลเป็นหลัก

เอาตัวอย่างในโรงพยาบาลเหมือนเดิม เรามีข้อมูลของหมอ และ คนไข้ ความสัมพันธ์ของหมอและคนไข้คือชู้สาว เห้ย ไอ้บ้าไม่ใช่ Grey Anatomy เอากันทั้งเรื่อง กลับเข้าเรื่อง ๆ มันคือ การที่หมอ รับผิดชอบคนไข้ ใช่มะ มันก็จะเก็บได้เลยว่า โอเค หมอคนนี้ดูคนไข้คนนี้ ๆ นะ ออกมาเป็น Database อีกแบบ

ผ่านไปอีกนิดหน่อยช่วง 1990 พวก Object-Oriented Database ก็เกิดขึ้น เราขี้เกียจอธิบายแล้วอะไปหาอ่านเอาละกัน จนถึงช่วงนี้แหละ ที่การเข้าถึงอินเตอร์เน็ตมันเยอะขึ้นเรื่อย ๆ ข้อมูลทะลักเข้ามาแบบมหาศาลมาก ๆ ทำให้มันเกิดรูปแบบของข้อมูลใหม่ ๆ เยอะมาก ๆ ทำให้เกิดพวก NoSQL Database ขึ้นมา เพื่อรองรับรูปแบบข้อมูลใหม่ ๆ ที่เกิดขึ้น นั่นเองงง นี่แหละ คือ วิวัฒนาการของ Database แบบย่อ ๆ แล้ว ถ้าเราเรียนเข้าไปมันจะลึกกว่านี้มาก ๆ

การจะเป็น Database ได้ มันจะต้องมีคุณสมบัติอะไรบ้าง ?

ถ้าเราบอกว่า Database มันเอาไว้เก็บข้อมูล งั้น ถ้าเราเก็บไฟล์ไว้ใน Folder มันก็คือ Database แล้วใช่ปะ หรือ ถ้าเราเก็บข้อมูลของเราไว้ใน Spreadsheet มันก็เป็น Database แล้วเหรอ

คำตอบคือ ไม่ เพราะการที่มันจะเป็น Database ได้ มันจะมีทั้งหมด 4 คุณสมบัติด้วยกัน หรือที่เราชอบเรียกกันว่า ACID Properties คือ Atomicity, Consistency, Isolation และ Durability

Atomicity เราจะพูดถึงเวลา เรามีการเปลี่ยนแปลง หรือทำอะไรบางอย่างกับข้อมูล มันจะต้องทำเหมือนเป็น 1 อย่าง อาจจะ งง นะ ตอนเราเรียน เราจะจำว่า All or nothing ตัวอย่างเช่น เราจะทำเรื่องโอนเงิน เราจะต้องทำ 2 อย่างคือ หักเงินบัญชีต้นทาง และ เพิ่มเงินในบัญชีปลายทาง คุณสมบัติ Atomicity จะการันตีว่า ทั้ง 2 Operation นี้ ถ้าทำ มันจะต้องทำสำเร็จทั้ง 2 อย่าง หรือถ้าไม่ ก็คือ ไม่ทั้งหมด (สำหรับคนที่เรียน มันจะอยู่ในเรื่อง Transactional)

Consistency ทำตามชื่อของมันเลยคือ การการันตีว่า ข้อมูลที่เราเปลี่ยนแปลง มันจะต้องถูกเปลี่ยนแปลงอย่างถูกต้องตามที่ผู้ควบคุมเขียนเอาไว้ ส่วนคุมถูกมั้ย เป็นความรับผิดชอบของผู้ควบคุมที่ต้องออกแบบมาให้ถูก Logic ถ้าเราเทียบกับการโอนเงิน สมบัตินี้ มันจะการันตีว่า จำนวนเงินของบัญชีต้นทางรวมกับบัญชีปลายทาง ทั้งก่อนเริ่ม และ สิ้นสุดการเปลี่ยนแปลงข้อมูล จำนวนเงินนั้นต้องเท่ากันเสมอ

Isolation จะพูดถึงเวลาที่มันมีการทำงานพร้อม ๆ กันหลาย ๆ อย่าง มันจะต้องการันตีว่า ผลของอีก Transaction นึง จะต้องไม่ส่งผลกับอีก Transaction นึงเสมอ ยกตัวอย่างโอนเงินเหมือนเดิม เช่น ตอนเราสั่งโอนเงิน มันทำการหักเงินในบัญชีต้นทางไปละ ยังไม่ได้เพิ่มเงินปลายทางนะ ถ้าระหว่างนั้นมี คนที่ต้นทางเช็คเงิน เงินเขาควรจะยังไม่หายไป (สำหรับคนที่เรียนลึก ๆ หน่อยมันจะมีพวก Locking Mechanisms)

Durability เป็นคุณสมบัติที่การันตีว่าเมื่อ การเปลี่ยนแปลงเสร็จสมบูรณ์มันควรจะคงอยู่ตลอด แม้กระทั่งระบบมีปัญหาเกิดความผิดพลาดขึ้นก็ตาม ถ้าเป็นตัวอย่างการโอนเงินก็คือ เมื่อ Transaction ทั้ง 2 เกิดขึ้นเรียบร้อยแล้ว มันจะการันตีว่า ยอดเงินทั้งสองฝั่งจะถูกเพิ่ม และ หัก เรียบร้อยจริง ๆ แม้ว่าระบบจะเกิดปัญหาอะไรบางอย่างก็ตาม

โดย Database ที่เราใช้งานกัน มันก็จะเป็นไปตามคุณสมบัติทั้ง 4 ข้อที่เล่าไปเลย มันก็จะออกแบบพวกกลไกมาควบคุมพวกนี้แหละ ถ้าเราเรียนลึกเข้าไป เราก็จะได้เรียนพวกกลไกนี่แหละว่า มันทำงานยังไง เช่นพวก Locking Mechanism ที่ใช้กับสมบัติ Isolation มันจะมีลึกเข้าไปอีกว่า เราจะ Lock แค่ไหน ระดับไหน แล้วการจะล๊อคจริง ๆ มันทำยังไง มันมีเรื่องเข้าไปอีกเยอะมาก ๆ แต่ถ้าเราไม่ได้ไปเป็น DBA จริง ๆ ก็ไม่ต้องไปรู้หรอก

ทำไม Spreadsheet ไม่ใช่ Database ?

ก่อนหน้านี้ เวลามีคนมาบอกว่า เออ เรามี Database เก็บข้อมูลนะ เราก็อ่ออ เข้าใจว่าเขามีมา เราแค่เอาไปเชื่อมแล้วทำงานได้เลย ปรากฏว่า เชี้ยยยย เปิดมาเป็น Spreadsheet เช่น Excel หรือดีหน่อย เป็น Google Sheet แล้วหวะ

เราเคยเจอพีค ๆ คือ พนังงานต้องกรอก Excel ประมาณ 20-30 จุด ที่กระจายอยู่ในไฟล์ประมาณ 4-5 ไฟล์ สำหรับการเก็บข้อมูล 1 Record เรียกว่า พีค ๆ เลยละ ทำมาจนไฟล์มันใหญ่ขนาดที่ ถ้าจะ Apply Function ทีรอเป็นนาทีอะ

อ่านมาถึงตอนนี้ พอจะเดาได้มั้ยว่า ทำไมพวก Spreadsheet มันไม่ใช่ Database มันขาด ACID Properties ตัวไหนบ้าง เราลองมาดูกัน

Atomicity ถ้าเกิดว่า การปรับปรุงข้อมูลครั้งนึง เราจะต้องกรอกมากกว่า 1 รอบ ใน Spreadsheet เราการันตีไม่ได้เลยนะว่า พนักงานที่กรอกจะกรอกครบจริง ๆ ยิ่งถ้ากรอกในหลาย Sheet และ หลายไฟล์ด้วย หนักเลยนะ

Isolation อันนี้ก็คือไม่มีเลยนะ ยิ่งถ้าเป็น Excel ด้วย หนักกว่าคือ ถ้าเราเปิดพร้อม ๆ กัน รับรองสนุกแน่นอน หรือดี ๆ หน่อย ๆ Google Sheet ระหว่างที่คนนึงแก้อยู่ อีกคนก็เปิดมาเห็นสิ่งที่เราแก้อยู่แน่นอน ถ้าเรายังแก้ไม่เสร็จ คนที่เข้ามาดู ก็จะเห็นข้อมูลที่แก้ไปแล้วแต่ไม่เสร็จเอาไปใช้พังอีก ไม่รอด

Durability พีค ๆ อีก ถ้าเป็น Excel ที่เป็นไฟล์ ๆ หนักเลย เมื่อคนแก้ทำเสร็จ แล้วเซฟ ระหว่างนั้นมีคนเปิดไฟล์แก้อยู่เหมือนกัน พอเสร็จก็เซฟทับลงไป คนว่าการแก้ไขของคนแรกจะยังอยู่มั้ย ก็น่าจะลอยหายไปแล้วแหละ เรียกว่าข้อมูลตรงนั้นก็หายไปตลอดกาล จอบอไป

จาก 4 สมบัติ ก็คือ แตกไป 3 สมบัติแล้วนะ ดังนั้น กราบละ อย่าบอกว่า Spreadsheet เป็น Database เข้าใจนะว่า มันเก็บข้อมูลได้เหมือนกัน แต่การใช้งานมันคนละเรื่องเลย มันเหมาะกับการทำงานที่แตกต่างกัน ถ้ามันจำเป็นต้องใช้จริง ๆ อย่างกเนอะ จ้าง Programmer มา Implement เถอะ แก้ตอนนี้ยังไม่สายนะ ถ้าไปตอนข้อมูลเยอะ ๆ แล้วเสียเงินอ้วกค่าย้ายนี่ไม่รู้ด้วยนะ

SQL vs NoSQL Database

สมัยก่อน พวกข้อมูลมันยังไม่มีความหลากหลายเหมือนทุกวันนี้มาก ๆ ทำให้สมัยก่อน เราก็จะใช้งานพวก Relational Database หรือจะเรียกก็ได้ SQL Database แต่ขอเรียกแบบแรกละกันนะ พวกนี้มันจะมองที่ความสัมพันธ์ของข้อมูลตามชื่อของมันเลย แต่พอปัจจุบัน ข้อมูลเรามีเยอะขึ้น หน้าตาแปลกขึ้นเรื่อย ๆ เปลี่ยนจากตารางเป็นแบบอื่น ๆ เลยทำให้พวก NoSQL Database เกิดขึ้นมา

NoSQL Database ไม่ได้บอกว่า มันไม่ได้ใช้งาน SQL นะ แต่มันคือ Not Only SQL หรือก็คือ อะไรก็ตามที่ไม่ได้เป็น Relational Database โดยในทุก ๆ วันนี้ เรามี NoSQL ออกมาตอบโจทย์การทำงานแบบต่าง ๆ เยอะขึ้นเรื่อย ๆ แบบไม่น่าเชื่อนะ จำได้ว่า ช่วงแรก ๆ ที่เราได้รู้จัก มันพึ่งมีกลุ่มที่เป็น Document-Based Database อย่าง mongoDB กับพวก Graph Database อย่าง Neo4j ออกมาเอง ตอนนี้ก็อะไรบ้างอะ Dynamo, Redis, Cassandra, HBase, CouchDB, OrientDB ลอง ๆ ไปอ่านดูได้ มันจะมีจุดเด่นของแต่ละตัวอยู่ เลือกใช้ได้ตามที่เราต้องการเลย

อ่านมาแล้วอาจจะแอบคิดว่า เอ๊ะ พวก Relational Database มันล้าสมัยเหรอ ทำไมเรายกตัวอย่างน้อยจัง แต่จริง ๆ แล้วเป็น Database ประเภทที่เราใช้งานกันเป็นหลักในโลกอยู่นะ เพราะต้องยอมรับว่า มันเกิดมานานกว่า และ มันสามารถที่จะเข้าถึงข้อมูลอะไรได้ง่ายกว่า อยู่ในรูปแบบที่คนเราคุ้นเคยมากกว่าด้วย ตัวอย่างก็เช่น MySQL, MariaDB, PostgreSQL, Microsoft SQL Server และอันที่เราว่าน่าสนใจในสมัยใหม่ ๆ หน่อยก็ CockroachDB ที่เกิดมาเพื่อ Distributed Database โดยเฉพาะเลยแบบโหดมาก ๆ ถ้าเราต้อง Scale บน Cloud หลาย ๆ Region หรือพวก Enterprise บางเจ้าก็ไปเล่นของเจ้าตลาดอย่าง Oracle ที่หลัง ๆ มาทำ Oracle Database Appliance แล้วคือ โหดสัสมาก ๆ เป็นพวกกลุ่ม Multi-Model ด้วย ยืดหยุ่นสุด ๆ

Shit! It's BIG DATA ERA man!

ช่วงหลาย ๆ ปีที่ผ่านมานี้ เราจะได้ยินพวกสาย Business พูดกันเยอะมาก ๆ ว่านี่นะ นี่มันยุคของ Big Data แล้วองค์กรเราต้องปรับตัว เริ่มจากฐานข้อมูลของเราก่อนเลยนะ อันนี้พวก Relational Database มันไม่ได้แล้วมันไม่รองรับ Big Data เอ้า อี IT ไปดูมาสิ๊ ได้คำตอบมา อ่อใช้ Hadoop ครับ เปลี่ยน ๆ ย้าย ๆ แต่นายครับ บริษัทเราไม่เก็บข้อมูลอะไรเลยนะครับ... ไม่ได้สิ เราต้องเป็น Big Data

นี่คือสิ่งที่แมร่งเกิดอยู่ในองค์กรจริง ๆ และเราว่า ไม่ใช่แค่เจ้าเดียวด้วย น่าจะหลาย ๆ เจ้า ประเทศอื่นไม่รู้นะ แต่ในไทยเราเจอแบบนี้ เยอะมาก เราก็เข้าใจ IT นะว่า ไม่มีข้อมูลแล้วกูจะหาให้มึงจากไหนวะเนี่ย ฮ่า ๆ แล้วเราจะย้ายไป Hadoop ทำไมวะ แล้วโปรแกรมที่ใช้งานตอนนี้ทำไงละ ชิบหายกูละ ใช่ม้าาา

ทีนี้คำว่า Big Data จริง ๆ เป็น Concept กับพวกลักษณะของข้อมูลมากกว่า ที่มันเกิดจากความหลากหลายของข้อมูล และ ปริมาณที่เยอะขึ้นเรื่อย ๆ แล้วต้องการระบบที่มันเข้ากับข้อมูลของเขามากกว่า มันไม่ได้บอกนะว่า เราจะต้องใช้อะไรนั่นนี่ แต่มันต้องเป็น Solution ที่เข้ากับข้อมูล เช่น เราอาจจะใช้ Relational Database ก็ยังได้ แต่เราอาจจะต้อง Optimise อะไรบางอย่างเพื่อให้มันเข้ากับการทำงานของเรามากขึ้น เช่นการทำ Index มั้ย การทำ View แยกออกมามั้ย มันไม่เกี่ยวกับว่า โหยย เราจะต้อง Implement โดยการใช้ Hadoop นะ แค่ว่า Hadoop มี Feature พวกที่มันเอื้อกับการทำข้อมูลขนาดใหญ่ เราขอไม่พูดถึงละกัน ไปอ่านเพิ่มกันเอาเอง

สิ่งที่เราอยากจะบอกจริง ๆ คือ อย่าไปอะไรกับ Buzzword มาก มันตอแหล เลือก Technology ที่เข้ากับเราเถอะ Technology ไหนที่ทำให้ Product ของเราแข็งขึ้น หยิบมาใช้ซะ ใช้ Product ของเราเป็นศูนย์กลาง อย่าเอา Technology เป็นศูนย์กลางเลยนะ สงสารผู้บริโภค สงสารคนในองค์กรด้วย....

สรุป

นี่น่าจะเป็นพื้นฐานง่าย ๆ ของ Database เอาให้พอเห็นภาพกว้าง ๆ ว่า มันคืออะไร และเราเอามาทำอะไรบ้าง ถ้าใครอยากศึกษาเพิ่มเติมก็อาจจะไปดู Database ที่เรายกตัวอย่างขึ้นมาก่อนก็ได้ว่ามันมีข้อดี ข้อเสียอะไรบ้าง เผื่อเราอาจจะต้องใช้ เราจะได้หยิบมาใช้งานได้เหมาะสมกับงานของเรา และสุดท้าย Spreadsheet ไม่ใช่ Database ขอบคุณครับบบบบ

Read Next...

Apple M4 รุ่นไหนเหมาะกับใคร

Apple M4 รุ่นไหนเหมาะกับใคร

หลังจากเมื่อหลายอาทิตย์ก่อน Apple ออก Mac รัว ๆ ตั้งแต่ Mac Mini, iMac และ Macbook Pro ที่ใช้ M4 กันไปแล้ว มีหลายคนถามเราเข้ามาว่า เราควรจะเลือก M4 ตัวไหนดีถึงจะเหมาะกับเรา...

Cloudflare Access ของดีขนาดนี้ ฟรีได้ไงวะ

Cloudflare Access ของดีขนาดนี้ ฟรีได้ไงวะ

จากตอนก่อน เราเล่าเรื่องการ Host Website จากบ้านของเราอย่างปลอดภัยด้วย Cloudflare Tunnel ไปแล้ว แต่ Product ด้าน Zero-Trust ของนางยังไม่หมด วันนี้เราจะมาเล่าอีกหนึ่งขาที่จะช่วยปกป้อง Infrastructure และ Application ต่าง ๆ ของเราด้วย Cloudflare Access กัน...

Mainframe Computer คืออะไร ? มันยังมีชีวิตอยู่ใช่มั้ย ?

Mainframe Computer คืออะไร ? มันยังมีชีวิตอยู่ใช่มั้ย ?

ทุกคนเคยได้ยินคำว่า Mainframe Computer กันมั้ย เคยสงสัยกันมั้ยว่า มันต่างจากเครื่องคอมพิวเตอร์ที่เราใช้งานกันทั่ว ๆ ไปอย่างไรละ และ Mainframe ยังจำเป็นอยู่มั้ย มันได้ตายจากโลกนี้ไปหรือยัง วันนี้เรามาหาคำตอบไปด้วยกันเลย...

Infrastructure as Code คืออะไร ทำไมถึงสำคัญมากในปัจจุบัน

Infrastructure as Code คืออะไร ทำไมถึงสำคัญมากในปัจจุบัน

เคยมั้ยเวลา Deploy โปรแกรมสักตัว เราจะต้องมานั่ง Provision Infrastructure ไหนจะ VM และ Settings อื่น ๆ อีกมากมาย มันจะดีกว่ามั้ยถ้าเรามีเครื่องมือบางอย่างที่จะ Automate งานที่น่าเบื่อเหล่านี้ออกไป และลดความผิดพลาดที่อาจจะเกิดขึ้น วันนี้เราจะพาทุกคนมาทำความรู้จักกับ Infrastructure as Code กัน...