NoSQL คือ เทคโนโลยีฐานข้อมูลที่ถูกออกแบบมาสำหรับงานเฉพาะทางบางอย่างที่ SQL ยังไม่สามารถตอบโจทย์ได้ดีเพียงพอ เมื่อพูดถึง NoSQL จะได้ยินชื่อเว็บไซด์ที่ใหญ่ๆ ติดพ่วงมาด้วย เช่น Facebook,Twitter, FourSquare, Digg และอื่นๆ ทำให้เรารับรู้ว่า NoSQL เป็นระบบฐานข้อมูลสำหรับงานที่ต้องรองรับข้อมูลขนาดใหญ่ๆ รองรับการขยายระบบได้ง่าย เป็นต้น
ข้อดีของ NoSQL
- โดยมาก NoSQL มักถูกออกแบบมาให้มี Availability สูงมาก และ Scale ระบบเพื่อรองรับผู้ใช้งานจำนวนมากได้ง่าย ถึงแม้ระบบจะทำงานร่วมกันข้าม Data Center ก็ตาม
- NoSQL หลายๆ ระบบถูกออกแบบมาสำหรับ Unstructured Data โดยเฉพาะ เช่น ประมวลผล Log, XML, JSON และเอกสารต่างๆ ทำให้มีความยืดหยุ่นในการใช้งานเฉพาะทางแต่ละประเภทสูง
ข้อเสียของ NoSQL
- ส่วนใหญ่แล้ว NoSQL จะทำงานแบบ Non-transactional ดังนั้นถ้าหากข้อมูลมีความละเอียดสูงและผิดพลาดไม่ได้เลย NoSQL หลายๆ ระบบก็อาจจะไม่เหมาะในหลายๆ กรณี
- การเรียกอ่านข้อมูลขึ้นมาใช้ส่วนใหญ่มักจะมี Cost ที่สูงกว่าการใช้ SQL เพราะไม่สามารถเลือกเจาะจงได้อย่างง่ายๆ ว่าจะเรียกข้อมูลส่วนไหนขึ้นมา ยกเว้นสำหรับงานเฉพาะทางบางอย่างที่จะดีกว่า SQL แบบชัดเจนมาก (ขึ้นอยู่กับงานที่ทำและเทคโนโลยีที่เลือก) แต่การบันทีกข้อมูลลงไปส่วนใหญ่จะง่ายกว่า SQL
- เทคโนโลยีส่วนใหญ่ไม่มีความเป็นมาตรฐานกลาง ดังนั้นการเปรียบเทียบแต่ละเทคโนโลยีค่อนข้างทำได้ยาก ผู้ใช้งานต้องมีความคุ้นเคยกับการจัดการ Software เหล่านี้ให้ได้ด้วยตัวเอง
- ผู้เชี่ยวชาญที่สามารถสนับสนุนเทคโนโลยีเหล่านี้ในระดับองค์กรได้นั้นยังมีไม่มาก แต่เทคโนโลยี NoSQL นี้กลับมีความจำเป็นมากในการที่องค์กรจะสร้างความแตกต่างในเชิงเทคโนโลยีจากคู่แข่ง
ปัญหาของ Relational Database
- Manual Sharding การแบ่งตารางฐานข้อมูล (Table) ออกเป็นส่วนๆ แล้วทำการกระจายไปจัดเก็บในหลายๆ Server เพื่อให้แต่ละตาราง (Table) ของฐานข้อมูลไม่จัดเก็บข้อมูลที่เยอะเกินไป เพราะถ้าข้อมูลในแต่ละฐานข้อมูลเยอะเกินไป จะทำให้ระบบฐานข้อมูลช้าไปด้วย แต่ปัญหาก็จะตามมาอีกคือ เมื่อต้องกระจายข้อมูลออกไปในแต่ละ Server การจะจัดการกับข้อมูล เช่น เพิ่ม แก้ไข ลบ ดึงข้อมูลมาแสดงต่างๆ จะต้องทำผ่าน Application หรือไม่อย่างนั้น ก็ต้องมี Server บางตัวที่คอยดึงข้อมูลแต่ละ Server มารวมเป็นก้อนเดียว นั้นหมายความว่า เราต้องทำด้วยตัวเราเอง ไม่ใช่ระบบฐานข้อมูลจัดการให้ (Manual Sharding)
- Distributed Cache เมื่อเราต้องการให้ระบบรองรับการเข้ามาใช้งานมากๆได้นั้น ถ้าจะต้องวิ่งเข้ามาอ่านข้อมูลผ่าน Database โดยตรงคงรองรับไม่ไหว หรือทำได้ช้า ดังนั้นจะต้องมีการทำ Cache Layer ขึ้นมา คือแทนที่จะเข้าไปอ่านจากฐานข้อมูลโดยตรง ก็ให้อ่านผ่าน Cache ก่อน ดังนั้นการอ่านข้อมูลจาก Cache เป็นการอ่านจาก Memory โดยตรง ทำให้รองรับปริมาณการเข้ามาใช้งานได้มากขึ้น
แต่ปัญหาคือ การทำ Cache Layer นี้ รองรับเฉพาะการอ่านข้อมูลเท่านั้น ไม่รองรับการเขียนข้อมูลได้ ถ้าต้องการรองรับการเขียนข้อมูลปริมาณมากๆ และอ่านข้อมูลปริมาณมากๆ จึงเป็นสิ่งที่ Relational Database ไม่สามารถรองรับงานในลักษณะ อ่าน-เขียน ข้อมูลปริมาณมากๆ ได้ดีนัก และประการสำคัญ การทำ Cache Layer จะต้องมีการดูแลรักษา และใช้ Server แยกออกไปต่างหากอีกด้วย
จากจุดนี้เอง ทั้งการทำ Sharding และ Caching เป็นสิ่งที่ถูกพัฒนาขึ้นใน NoSQL เทคโนโลยี โดยรองรับ Auto-Sharding และ Integrated Caching ในตัวเอง ดังนั้นเราจึงได้เห็น NoSQL ถูกนำไปใช้งานกับระบบใหญ่ๆ เช่น Facebook,Twitter, FourSquare, Digg และอื่นๆ เพราะ NoSQL ออกแบบมาเพื่อรองรับความต้องการงานใหญ่ๆได้ดีโดยเฉพาะอยู่แล้ว แต่ถึงอย่างนั้นก็ตามยังมีคุณสมบัติอื่นๆ ที่น่าสนใจใน NoSQL เทคโนโลยี
DB ตัวไหนบ้างที่เป็น NoSQL Database
- Redis
- MongoDB
- Cassandra
- Riak
- CouchDB
- HBase
- HyperTable
- ElasticSearch
- Couchbase
- Neo4j