ความแตกต่างหลักๆของ Relational database กับ NoSQL database ก็เป็นเรื่องของความเร็ว ที่เราได้ประโยชน์ และเรื่องการทำงานที่เป็นแบบไม่ต้องสร้างความสัมพันธ์ให้กับมัน รวมไปถึง feature พิเศษที่เกิดมาเพื่อเหมาะกับงานแต่ละแบบด้วย
ทำงานแบบไม่ต้องเขียน SQL อีกต่อไป
SQL ก็เป็นภาษาหลักที่เราต้องเขียนเพื่อจัดการกับข้อมูลที่เก็บใน Database แบบ relational เป็นหลัก แต่ว่า NoSQL ทำให้เราสามารถเขียนอ่านแก้ไขข้อมูลโดยไม่ต้องเขียน SQL command อีกต่อไป แต่ว่าจะต้องใช้คำสั่งเฉพาะ ของ NoSQL แต่ละตัวที่เราเอามาใช้งานเองเท่านั้น
เริ่มต้นเก็บข้อมูลได้ง่าย และเร็ว เพราะไม่ต้องออกแบบ
ปกติก่อนที่เราจะเก็บข้อมูลลง database เราจะต้องออกแบบ table/field ก่อน ว่าเราจะมีโครงสร้างอย่างไร สำหรับมือใหม่อาจจะต้องคิดเยอะ และ งง หน่อย เพราะต้องบอกความสัมพันธ์ทั้งหมดให้ได้ ว่าเชื่อมโยงกันอย่างไร แล้วยิ่งถ้าเป็น Database ของงานที่มีขนาดใหญ่มาก ก็จะยิ่งยุ่งยากเพิ่มขึ้นไปอีก แต่ว่า NoSQL การทำงานโดยส่วนใหญ่ เราไม่จำเป็นต้องออกแบบเลย เพราะว่าเราอยากเก็บข้อมูลอะไรก็เก็บเข้าไปได้เลย ตามที่ NoSQL ตัวที่เราใช้งานอยู่รองรับทำให้มันเริ่มต้นใช้งานได้ง่ายมาก เพราะว่าทำงานเหมือนตัวแปรที่อยู่ในโปรแกรม แต่เก็บและเรียกใช้ได้จากทุกที่ที่เข้าถึง NoSQL Database ตัวเดียวกันนี้
ไม่จำเป็นต้องออกแบบ แต่ควรออกแบบ
เพราะว่าความง่าย จึงเป็นดาบสองคม เนื่องจากความง่ายทำให้เราไม่ต้องคิดเยอะ แล้วก็เก็บข้อมูลไปเลยพร้อมกับตั้งชื่อ key เช่น ชื่อ key user:1 มีค่าเป็น name surname ,ชื่อ key course:1 มีค่าเป็นชื่อ course เป็นต้น แต่หากว่า โปรแกรมนี้ผ่านไป 3 ปี เราจะยังจำได้มั้ย ว่ามี key อะไร หน้าตาแบบไหน แล้วเก็บอะไรอยู่บ้าง นั่นแหล่ะคือความยาก โดยเฉพาะข้อมูลที่เก็บสำหรับส่วนเล็กๆ เช่น เก็บข้อมูลของบางกิจกรรมที่นานๆจะเกิดขึ้นสักทีหนึ่ง แบบนี้ ในท้ายที่สุด เราอาจจะเกิดการตั้งค่าเข้าไปใน Key เดียวกัน แล้ว application ก็อาจจะรวนจนพังได้ โดยเฉพาะไปเปลี่ยนค่าที่เป็นค่าที่สำคัญของระบบ ดังนั้น ก่อนใช้งาน เราควรออกแบบการตั้งชื่อ key ต่างๆ หรือว่าอาจจะทำเอกสารชื่อ key ที่เราใช้จริง พร้อมคำอธิบายเอาไว้ ก็จะดีกว่ามาก จะได้ไม่งงตัวเองเมื่อเวลาผ่านไปนานๆ
NoSQL บางตัวไม่ได้เหมาะจะเป็น database
ยกตัวอย่างง่ายๆ ก็คือ Redis ที่ไม่ได้เหมาะสำหรับเอามาเป็น Database เก็บข้อมูลถาวร จริงอยู่ที่มันเก็บข้อมูลแบบลง Harddisk ให้ถาวรได้ แต่ด้วยความที่รองรับการเปลี่ยนแปลงได้ง่ายมาก ดังนั้นข้อมูลเราอาจจะถูกเขียนทับไปได้โดยง่ายมาก
ใช้ NoSQL แล้ว ก็ยังควรใช้ Database แบบ SQL อยู่
อ้าวไหนว่า NoSQL ก็เป็น database ที่ทำงานได้เร็วแล้วไง ทำไมต้องมี database แบบ SQL มาใช้อีก นั่นเป็นเพราะว่า ความมั่นคงของข้อมูลใน database แบบ SQL นั้นดีกว่า NoSQL ดังนั้นที่ถูกต้องในการออกแบบ ก็ควรมี database แบบหนึ่งที่ทำงานได้อย่างเสถียร สำหรับเก็บข้อมูลในระยะยาว แล้วอ่านขึ้นไปเก็บ NoSQL จากนั้นก็ทำงานจาก NoSQL แทน
บริษัทใหญ่ๆ ระบบที่มีคนใช้งานเยอะๆก็ใช้ NoSQL
อย่างที่ย่อหน้าข้างบนบอก ว่าต้องออกแบบตั้งแต่ Architecture เลย ให้เก็บข้อมูลที่ไหน เวลาอ่าน อ่านจากที่ไหน เหล่านี้เป็นสิ่งที่เราต้องเรียนรู้เพิ่มเติม จากประสบการณ์ของผม หลายบริษัทใหญ่ก็มีเอามาใช้แล้ว ดังนั้น เค้าก็พิสูจน์อะไรได้หลายอย่างว่า ไม่ใช่เราคนเดียวในโลกแน่นอน
ต้องเลือก NoSQL ให้เหมาะกับงานที่ใช้
เพราะว่า NoSQL มีความหลากหลาย และเก่งในงานเฉพาะตัวที่แตกต่างกัน ดังนั้น เราจะต้องใช้เวลาเป็นอย่างมากในการเลือกให้เหมาะสมเพราะว่าถ้าเลือกผิด นอกจากจะเสียเวลาแล้ว อาจจะหนักถึงขั้นต่อยอดไม่ได้เลยทีเดียว ตัวอย่าง ถ้าเราอยากได้ feature แค่ key/value ก็อาจจะใช้ memcache เลย หรือว่าถ้าอยากให้ทำ sort ข้อมูลก่อนจะส่งมาให้เราใช้ ก็ต้อง Redis เลย เป็นต้นครับ
สรุป NoSQL ก็คือ database ที่ไม่ต้องออกแบบรูปแบบการใช้งานและเก็บข้อมูลก่อนเลย รวมทั้งโดยส่วนใหญ่จะมีการทำงานที่รวดเร็วกว่า SQL database ทั่วๆไป แต่ว่าการใช้งานควรออกแบบรายละเอียดการเก็บข้อมูลก่อนเสมอ เพื่อไม่ให้เรา งง ในท้ายที่สุด และที่สำคัญเลือกใช้ให้เหมาะกับงาน จะดีที่สุด เพราะไม่มีใครห้ามว่า 1 งานเราจะใช้ Database ได้แบบเดียว จริงมั้ยครับ
2 thoughts on “NoSQL คืออะไร คือ database ที่ทำงานได้เร็ว และ หลากหลาย”