SQL หรือ NoSQL ดีล่ะ?

วันนี้มาคุยเรื่อง Database กันดีกว่าค่ะ

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

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

หลาย ๆ คนคงตั้งข้อสงสัยว่า แล้ว SQL กับ NoSQL มันต่างกันยังไง มันคืออะไร ก็จะเล่าให้ฟังดังนี้นะคะ

 

Once upon a time.. 

ในสมัยก่อนโน้น มีนักพัฒนาโปรแกรม เก็บข้อมูลในคอมพิวเตอร์ขึ้นมาในรูปแบบไฟล์ เวลาเรียกใช้ก็เปิดไฟล์นี้ขึ้นมาดู อ้างอิง หรือเขียนต่อลงมาเป็นแถว ๆ 

ต่อมา เมื่อเกิดความต้องการใช้งานไฟล์ข้อมูลนั้นในขณะเดียวกันหลายๆคน และต้องการทำให้ข้อมูลมันเชื่อมโยงกันได้ ก็เลยนำข้อมูลมาจัดเก็บลงในตาราง (Tables) โดยแบ่งเป็นแถว (Rows/Records) และคอลัมน์ (Columns) ทีนี้แต่ละคอลัมน์ของตารางนั้นก็สามารถเชื่อมโยงกับข้อมูลในอีกคอลัมน์ของอีกตารางนึงได้เป็นทอดๆ เราเรียกการจัดเก็บข้อมูลลักษณะนี้ว่า Relational Database โดยสามารถใช้ร่วมกันกับโปรแกรมจัดการฐานข้อมูลที่รู้จักในอีกชื่อหนึ่งว่า DBMS (Database Management System) โดยผ่านมาตรฐาน เช่น SQL, ODBC หรือ JDBC เพื่อใช้ในการติดต่อกับฐานข้อมูลระหว่างโปรแกรมที่ใช้งานกับข้อมูลเอง

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

จนมีอยู่วันหนึ่ง Google ประกาศว่าตนเองก็ใช้ NoSQL ในการเก็บข้อมูล โดยทำออกมาเป็น BigTable ซึ่งเป็นของ Google เองเลย โดยพบข้อดีของการเปลี่ยนมาใช้ฐานข้อมูลรูปแบบนี้คือ สามารถเข้าถึงข้อมูลได้อย่างรวดเร็วกว่า และสามารถขยายการเก็บข้อมูลได้ง่ายกว่า ต่อมาก็พบว่า Facebook เองก็ใช้ NoSQL เหมือนกันแต่นำมาใช้เฉพาะส่วนที่เป็น Inbox Message เท่านั้น และก็ได้พัฒนาต่อจนทำเป็น DBMS ตัวใหม่ที่ชื่อว่า Cassandra โดยพัฒนาต่อยอดมาจาก BigTable ของ Google นั่นเอง

ด้วยเหตุนี้จึงทำให้มีคนสนใจ NoSQL มากขึ้น จนมาถึงปัจจุบันค่ะ

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

ถามว่าทำไม NoSQL นั้นถึงทำงานได้รวดเร็ว เหตุผลเพราะ NoSQL นั้นส่วนมากทำงานบน RAM ค่ะ เมื่อประมวลผลเสร็จจึงจะเก็บไว้ใน Hard disk ในขณะที่ SQL เองนั้นทำงานบน Hard disk ซึ่งก็ช้ากว่าอยู่แล้ว ทีนี้หากเกิดเหตุการณ์ไม่คาดฝัน ไฟกระชาก ไฟตก เกิดการ Interrupt ของ RAM แล้วละก็ NoSQL อาจไม่สามารถสำรองข้อมูลที่กำลังประมวลผลอยู่ในขณะนั้นไว้ได้ เพราะ RAM ทำงานก็ตอนที่มีไฟวิ่งผ่านอยู่ แต่ถ้าไฟไม่วิ่งผ่าน ข้อมูลที่ทำอยู่ก็มีโอกาสสูญหายสูงกว่าการใช้ SQL ปกติค่ะ

เรื่องที่ไม่ดีอีกเรื่องหนึ่งคือการ Query ข้อมูลนั้นส่วนมากจะทำผ่าน Command line ค่ะ ถึงจะมี DBMS แต่ก็ใช่ว่าจะสามารถใช้ได้กับ NoSQL ทุกรูปแบบนะคะ เพราะตัว NoSQL เองก็ยังแบ่งออกเป็น 4 ประเภทอีกต่างหาก และโครงสร้างก็ยังไม่เหมือนกันอีกด้วย ทำให้การใช้งาน NoSQL แต่ละยี่ห้อนั้นก็ควรมองถึงการพัฒนาต่อไปในอนาคตด้วยนะคะ ว่าทางผู้พัฒนา NoSQL ยี่ห้อนั้น ๆ เค้ามีการพัฒนาต่อตลอดหรือไม่ ถ้ามีการพัฒนาต่ออย่างต่อเนื่อง มีประสิทธิภาพ แก้ bug ได้รวดเร็ว มีคู่มือที่ใช้งานง่าย มีทีม Support ที่พร้อมตอบปัญหา ก็น่าใช้งานค่ะ

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

 

แล้ว NoSQL เหมาะกับการใช้งานแบบไหน

อย่างแรกที่จะแนะนำเลยคือ NoSQL ไม่เหมาะกับงานด้านการเงิน หรือระบบใหญ่ ๆ ที่ต้องการการเชื่อมโยงของข้อมูลเยอะค่ะ
แต่เหมาะกับงานที่ไม่ต้องเชื่อมโยงข้อมูลกันมาก เช่น 

  • การเก็บ ShortURL
  • งาน Todo – List
  • งาน Search Engine
  • งานเก็บ Chat-Log จากโปรแกรม Chat
  • งาน Web-service ที่ทำงานกับ ajax javascript เป็นส่วนมาก
  • ฯลฯ

 

 

NoSQL ที่เป็นที่นิยมในปัจจุบัน

หวังว่าคงจะเข้าใจไม่มากก็น้อยนะคะ ส่วนเรื่องการใช้งานสามารถศึกษาต่อได้จากข้อมูลที่ให้ไปนี้ได้เลยค่ะ

Web Development | | No Comments

Leave a Reply

« »