ทำการสรุปหัวข้อที่น่าสนใจจากบทความเรื่อง NoSQL Database :: An Overview จาก ThoughtWorks

หลังจากที่อ่านบทความดังกล่าวแล้ว
มีหลายๆ หัวข้อที่น่าสนใจ อาทิ เช่น

  • NoSQL คืออะไร
  • ทำไมถึงต้องเลือกใช้ NoSQL
  • Schema-less คืออะไรกัน

เริ่มกันเลยดีกว่า

ในบทความนี้สรุปไว้อย่างน่าสนใจ ว่า
การนำ NoSQL database มาใช้งานนั้นไม่ได้ว่าเราจะเลิกใช้ RDBMS database นะ
จะอย่างไรก็ตามเราก็ยังใช้ RDBMS database อยู่เสมอนั่นแหละ
แต่ว่าโลกของเรามันเข้าสู่ยุคของ Polygot Persistence

Polygot Persistence นั้นหมายถึงว่า
ในระบบหนึ่งๆ หรือการแก้ไขปัญหาหนึ่งนั้น
สามารถใช้เทคโนโลยีในการเก็บข้อมูลต่างๆ ให้เหมาะสมกับรูปแบบข้อมูลที่มีหลายหลาย
ไม่ใช้ยึดติดกับ RDBMS database เพียงอย่างเดียวนะ
โดยแนวคิดนี้สามารถนำไปประยุกต์ใช้ตั้งแต่ระบบเล็กๆ ไปจนถึงระดับ Enterprise ได้เลย

มาดูกันว่า NoSQL เขาอธิบายว่าอย่างไร

ซึ่งผมเคยเขียนสั้นๆ ไว้ในเรื่อง NoSQL แบบเร็วๆ ไว้นิดหน่อย
แต่มาดูกันว่าในบทความนี้เขาว่ากันอย่างไร

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

ในการพูดคุยในโลกของ NoSQL ให้ใช้ hashtag #nosql นะ
ไม่งั้นจะหาข้อมูลต่างๆ ไม่เห็นกัน

NoSQL นั้น จะไม่มีการกำหนดคำจำกัดความของมันไว้
แต่จากการสังเกตคุณลักษณะแล้ว พอจะสรุปได้ว่า

  • ไม่ใช้รูปแบบเชิงความสัมพันธ์ (Relational model)
  • ทำงานได้ดีบน cluster
  • ส่วนใหญ่จะเป็น open-source
  • สร้างขึ้นมาในศตวรรษที่ 21
  • Schema-less

ทำไมถึงต้องเลือกใช้ NoSQL ล่ะ

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

ดังนั้น NoSQL จึงเข้ามาแก้ไขปัญหาในส่วนนี้
ทำให้ไม่ต้องแปลงข้อมูลไปมาให้เสียเวลา

และยิ่งในปัจจุบันระบบงานต่างๆ เช่น web application นั้น
มีรูปแบบข้อมูลที่หลายหลาย
มีปริมาณข้อมูลที่สูงมาก ขนาดที่เรียกว่า Big Data หรือ Very Big Data แล้ว
ระบบจัดเก็บข้อมูลก็ต้องสามารถรองรับได้ และ สามารถทำงานบนระบบ Cluster ได้ง่ายด้วย
ซึ่งตรงนี้แน่นอนว่า RDBMS database ไม่ได้ออกมาตอบโจทย์นี้สักเท่าไร
หรือทำได้แต่ประสิทธิภาพการทำงานไม่ดีเท่าไร

รูปแบบข้อมูลที่มักพบเจอใน NoSQL ประกอบไปด้วย 2 แบบคือ

  1. Aggregate Data Model มักจะประมวลผลการทำงานแบบ Map-Reduce
  2. Distribution Data Model มักจักมีการจัดเก็บข้อมูลในรูปแบบของ Sharding และ Replication

ถ้าเราต้องเลือกใช้งาน NoSQL สามารถอธิบายเหตุผลได้ง่ายๆ ดังนี้

  • เพื่อปรับปรุงการพัฒนาระบบงานที่ใช้งาน database เพื่อให้เลือก database ที่เหมาะสมกับระบบ
  • เพื่อปรับปรุงประสิทธิภาพในการเข้าถึงข้อมูล เมื่อข้อมูลมีปริมาณมากๆ
  • เพื่อลด latency time
  • เพื่อเพิ่มจำนวน throughput

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

ตัวอย่างของระบบงานที่เลือกใช้ NoSQL

Key-value database

  • ข้อมูล session ของผู้ใช้งาน
  • ข้อมูลผู้ใช้งาน
  • ข้อมูลของ shopping cart

Document database

  • ระบบ Content Management System (CMS)
  • ระบบ Blogging
  • Web analytic
  • Real-time analytic
  • E-commerce

Column family database

  • ระบบ Content Management System (CMS)
  • ระบบ Blogging
  • ระบบ counter ข้อมูล
  • ระบบ expire usage
  • ระบบต่างๆ ที่มีอัตราการเขียนที่สูงมากๆ

Graph database

  • ข้อมูลที่ต้องเชื่อมโยงกัน
  • Social network
  • Spatial data
  • ระบบให้คำแนะนำต่างๆ
  • Text Sentiment

ปิดท้ายด้วยเรื่อง Schema-less

โดย NoSQL เกือบทุกตัวบอกว่าเป็น Schema-less
มันหมายความว่า ไม่มี schema หรือ โครงสร้างใดๆ มากำหนด database
ว่าต้องเป็นอย่างนั้น เป็นอย่างนี้เหมือนกับ RDBMS database

Schema-less database นั้นจะมีโครงสร้างตามข้อมูลที่ต้องการบันทึก

Schema-less database จะมีการ migrate ข้อมูลเมื่อทำการเปลี่ยนแปลง schema
เหมือนกับ RDBMS database แต่ว่าผู้ใช้งานยังสามารถอ่านข้อมูลได้อยู่นะ
เนื่องจากมันทำงานแบบ incremental migration
ส่งผลให้ระบบงานเป็นแบบ Zero downtime หรือ 24* 7 นั่นเอง

Tags: